Seasar2 mini event
6/29 19:00から21:00 wakhokの12FでSeasar2のmini eventを行います。協賛は、日本Javaユーザグループです。
場所はこちら。
http://www.wakhok.ac.jp/tyo-sat/map.html
場所を貸していただくwakhokのみなさまありがとうございます。
うわさのtugboat.GTDが登場します。
http://tugboat-gtd.sandbox.seasar.org/index.html
ぜひ、screenshotやデモをお試しください。
イベントの内容はこちら。
- Seasar2の実装事例 - tugboat.GTDの紹介
- tugboat.GTDの紹介/デモ
- version 0.8 Preview: tugboat.GTD + RESTful WEB Services.
- Super Agile Web Development with Seasar2
- Seasar2のデモ
- Super Agileな開発手法
- (プレゼンテーション or ビジネスロジック)をどう実装するのか。
- クラス構成はどうするのか。
- テストの考え方。
- Q&A
追記:申し込みなどは特に必要ないので、直接会場にお越しください。
Service を使う際の方針
TeedaでService を使う場合で、以下のどちらの案が良いか迷っています。
たぶん、迷っているってことは、どれも決定的ではないということなはず。6/29にも説明するつもりですが、私の考えは次のとおりです。
- プレゼンテーションロジック(画面表示のためのロジック)は、Pageクラスに実装する。
- その画面に閉じたビジネスロジックは、そのPageクラスに実装する。
- 同一ユースケース(サブアプリケーション)の複数の画面で使われるロジックは、各画面の共通の親Pageクラスに持たせる。
- 複数のユースケースで使われるロジックは、共通のユースケースを抽出し、共通のユースケース名Serviceクラスに持たせる。
まとめると、プレゼンテーションだとかビジネスロジックだとかは気にせずに、画面固有のロジックはその画面(Page)に、ユースケースで共通に使われるロジックはユースケース共通のPageクラスに、複数のユースケースで使われるロジックは、共通ユースケース用のServiceクラスに持たせるということです。
ビジネスロジックには、DBFluteのConditionBeanの組み立ても含まれます。
従来の常識(?)だと、プレゼンテーション、ビジネス(ドメイン)、データアクセスは、別の層に分けることが望ましいとされていました。理由は、それぞれ役割が違うから。プレゼンテーションとビジネスの間にサービス層をおくパターンもあります。
層と層は、インターフェースでつなぐのが良いとされているので、もうクラスいっぱい、おなかいっぱい。
ロジックをどこにおくのかが明確になっていれば、メンテナンスはしやすいはずなので、層にこだわるのは、もうやめたほうがいい。以前は、プレゼンテーション層のクラスにロジックを置くとテストしにくいという問題がありましたが、Teedaの場合、PageもPOJOなので、テストしにくいという問題はありません。
Serviceクラスには、Entity(DTO)、非永続的な引数を渡すことになるでしょう。
このやり方だと、Pageクラスが大きくなる可能性がありますが、大きくなるのは、ロジックが多い場合でしょう。ロジックが多いクラスが大きくなるのは、特に問題ないと思います。メソッドが適切に分割されていればOK。
もう難しく考えるのはやめましょう。いまどきのアプリは、ロジックはあまりないはず。