PB(Presentation Businesslogic)レイヤアーキテクチャ
Actionをプレゼンテーション層とビジネスロジック層のglueとして使う場合、レイヤとしては、プレゼンテーション層とビジネスロジック層の2層構造になります。データアクセス層はDaoとしてビジネスロジック層に吸収します。ActionからDaoを呼び出す場合もあるためです。ビジネスロジックは、ドメインロジック、データアクセスロジック(Dao)、アプリケーションロジックで構成されると考えてもそんなに違和感無いんじゃないかと思います。
その場合の各層は次のようなクラスで構成されます。
- プレゼンテーション層
- ビジネスロジック層
リッチドメインモデルの検索系の場合、次のような処理が行われます。
- Actionがプレゼンテーションモデル(検索条件)を受け取る。
- ActionはDaoを使って、ドメインモデルを取得する。
- ActionはDxoを使って、ドメインモデルをプレゼンテーションモデルに変換する。
リッチドメインモデルの更新系の場合、ビジネスロジック層では次のような処理が行われます。
- Actionがプレゼンテーションモデルを受け取る。
- ActionはDxoを使って、プレゼンテーションモデルをドメインモデルに変換する。
- ActionはDaoを使って、ドメインモデルを永続コンテキストに登録する
- Actionはドメインモデルのドメインロジックを呼び出す
- 必要ならActionはアプリケーションロジックを呼び出す
Actionのメソッドにはトランザクション用のAOPが設定されているので、メソッドが開始するときにトランザクションが開始され、メソッドが終了するときに、自動的にO/R MapperによりSQL文が発行され、コミットされます。
シンドメインモデルの検索系の場合、リッチドメインモデルの場合と同じです。
シンドメインモデルの更新系の場合、リッチドメインモデルとの違いは、4の部分で、ドメインモデルを引数にしてドメインロジックを呼ぶ部分だけです。
Actionがアプリケーションロジック、ドメインロジック、Daoを直接呼び出すようにした場合、ビジネスロジックの仕様が変わるとActionにも影響が及んでしまいますが、その仕様変更は、アプリケーションロジック、ドメインロジック、Daoにカプセル化されていますから、特に問題なさげですね。
Dxoはプレゼンテーション層に所属していながら、実際にコードを書く人は業務に精通しているビジネスロジック層の人になると思われますが、これはしょうがないですね。