ひがやすを技術ブログ

電通国際情報サービスのプログラマ

アーキテクチャ

ダイコン時代のアーキテクチャは次のようになると思っています。

  • UI層、サービス層、永続化層、エンティティ層(ドメインオブジェクト)で構成される。
  • UI層はUIのフレームワーク(Struts, Tapestry等)に依存する。
  • 永続化層の実装はO/Rマッピングフレームワーク(Hibernate等)に依存する。しかし、永続化層の仕様(interface)は特定のフレームワークに依存してはいけない。JDBC等のAPIも永続化層以外で用いるべきではない。
  • サービス層、エンティティ層は特定のAPI(フレームワーク)に依存しないPOJOである。
  • サービス層、永続化層は仕様(interface)と実装が明確に分離され、利用者側は仕様だけを知っていれば良い。
  • UI層はサービス層とエンティティ層だけに依存する。サービス層は永続化層とエンティティ層だけに依存する。永続化層はエンティティ層だけに依存する。UI層、サービス層、永続化層をエンティティ層のオブジェクトが流れることによって情報が伝達される。
  • UI層は必要があれば状態を持つ。サービス層、永続化層は状態を持たない。エンティティ層は状態そのものである。
  • サービス層、永続化層はダイコンで管理される。UI層はダイコンで管理される場合(StrutsのAction)もあれば、そうでない場合(Tapestry)もある。どちらにせよ、サービス層との依存関係はダイコンに依存せずに解決されなければならない。
  • トランザクション、リモート呼び出し、セキュリティはサービス層で解決される。しかし、サービス層のコンポーネントがそれを意識することはない。AOPによって透過的に処理される。