[Seasar-user:20449] Re: ソース階層分けについて

Takafumi Yoshida [E-MAIL ADDRESS DELETED]
2010年 12月 20日 (月) 09:36:56 JST


いつもお世話になります。吉田(zephiransas)です。

2010年12月20日0:51 Yuzuru Funakoshi <[E-MAIL ADDRESS DELETED]>:
> 気になったのがService層です。SAStrutsの場合、DAOとServiceが合併して、
> [1Serviceクラス=1テーブル]のように、Dortengのツールで自動生成されます。
>
> ただ、そうなるとビジネスロジック層はどこにいくのかはっきりしません。
> 公式サイトにあるように開発者のひがさんはそれをService層で行いましょうと言う
> コメントもありますが、本当はActionクラスも無くして画面から直接Service層に繋げ
> たいような事も読んだ記憶があります。

あくまで自分の場合ですが、1ユースケースで1Service作成を基本にしています。

例えば、ユーザマスタ保守といったユースケースがあった場合、Actionには
action.User.IndexAction - 一覧とか
action.User.EditAction - 編集画面とか
を作成し、Serviceは1つのみで
service.UserService
を作成し、これに一覧表示用データを返すメソッドやformからDBを更新するメソッド
を実装していきます。

> 例えば、あるプログラムでユーザ削除と言うActionを実装しようとする時、
> ユーザマスタ・組織マスタなど、複数テーブルの更新処理が必要となり、
> それをビジネスロジックと呼んでいると思います。

この場合はアプリケーションの要求次第のように思います。

 ユーザマスタ・組織マスタの更新処理をそれぞれ分けたいのであれば、別のServiceに
実装し、UserServiceのメソッドから各々の更新メソッドを分けるようにするかもしれません。
#自分なら、分けないでしょうけど:-)

> [1Serviceクラス=1テーブル]となるとどうしても、他テーブルのトランザクションを
> 他のテーブルのServiceに含めたくないと思ってしまいます。

Doltengで生成されたプロジェクトであれば、Actionの実行開始とともにトランザクションが開始
されるので、Serviceでのトランザクションは特に意識しなくてもいいとおもうのですが・・・
どういった部分で悩んでいるのが、もうちょっと具体的にわかるといいかも


Seasar-user メーリングリストの案内