J2EEアプリケーションアーキテクチャ
思いついたことを気ままに書いてみる。
プレゼンテーションレイヤにおけるDTOの使用
プレゼンテーションレイヤにおいて、いつDTOを使うべきか、いつ使うべきでないか。
プレゼンテーションレイヤにおけるSQL文の発行
プレゼンテーションレイヤにおけるSQL文の発行に関する問題。
JSPのアーキテクチャ上の制限
JSPやタグライブラリの中でSQLエラーが発生しても、適切なエラー処理をおこなうことができない。したがって、プレゼンテーションレイヤではできるだけ、SQL文の発行を避けるべき。
リッチなエンティティ、シンなエンティティ
オブジェクト指向で作る場合、ほとんどのケースでデータと振る舞いをひとつのオブジェクトにまとめるべきである。ただし、アーキテクチャ上の制約でそうすべきでない場合や、振る舞いをもたない単なるデータの容器が必要な場合もある。
ドメインオブジェクト、エンティティオブジェクト
ドメインオブジェクトとエンティティオブジェクトは同じものなのか。ドメインレイヤはエンティティオブジェクトだけで構成されるべきなのか。
ドメインモデルの意味の違い
ドメインモデル(RUP)において扱われるのはエンティティオブジェクト、ドメインモデル(RDD)ではエンティティ+α(分析モデルにおけるJacobson的なコントローラの一部、分析モデルにおいてはエンティティの一部だが永続化されないオブジェクト、その他一般概念など)。
レイヤアーキテクチャ
ドメインモデル(RUP)だけをドメインレイヤに配置すると、サービスレイヤが肥大化し、手続き的なアーキテクチャになりがち。たとえ、Entity beanやO/Rマッピングフレームワークを使っていたとしても、これはTransaction Scriptのバリアントに過ぎない。ドメインモデル(RUP)とドメインモデル(RDD)の違い、ドメインレイヤとサービスレイヤにはどのようなオブジェクトが属し、どのような役割を受け持つのかを理解する必要がある。
サービスレイヤ(アプリケーションレイヤ)には、Jacobson的なコントローラの一部、ユースケースに必要だがドメインレイヤに含まれないワークフローロジックなどが含まれる。また、プレゼンテーションレイヤに単純なAPIを提供するのもサービスレイヤの役目。サービスレイヤは、Session FacadeパターンやApplication Facadeパターンで実現されることが多い。
ドメインレイヤは、Jacobson的なコントローラの一部、エンティティ、その他で構成され、ビジネスロジックを実装する。Entity Bean(古いJ2EEアーキテクチャにおいては)やPOJOで実現されることが多い。