ひがやすを技術ブログ

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

EJB3時代のアーキテクチャパターン 業務ロジックType2

  • Type2:Serviceに業務ロジックを書く

ManagedBeanに業務ロジックを書くパターンの問題点である「クラスが肥大化してメンテナンスが困難になる」を解決するのが、このTypeで、Actionから業務ロジックを分離して、Serviceで業務ロジックを実装します。ServiceはActionごとに用意され、実体はStateless SessionBeanになります。データアクセスロジックはDaoで実装して、Serviceクラスから利用します。DaoはEntityごとに用意します。DaoをEntityごとに用意すれば、データアクセスロジックを使いたい人は、最初に対象となるEntityのDaoをチェックするでしょうから、データアクセスロジックの分散を避けることができます。EntityManagerはDaoにDIします。

  • TransactionServletFilter
  • Action(プレゼンテーションロジック)
  • Service(業務ロジック。ActionにDI)
  • Dao(データアクセスロジック。ServiceにDI)
  • EntityManager(DaoにDI)
  • Entity

開発者が書く必要があるのは、Action、Serviceのインターフェース、Serviceの実装、Daoのインターフェース、Daoの実装です。クラス数は増えてしまいましたが、Actionの肥大化に問題、データアクセスロジックの分散問題は解決されました。
しかし、View:Action:Serviceは1:1:1の関係なので、「Viewごとに業務ロジックが実装されるので、同じようなロジックが複数のViewに分散する可能性がある」問題は、依然として解決されていません。
後、Daoの必要性については考えてみる必要があるでしょう。Daoがなければデータアクセスロジックが分散する危険性がありますが、小さなアプリケーションの場合、多少分散してもたかが知れているという考えもあります。以前のようにデータアクセスのフレームワークを隠蔽するという必要性は、JPAデファクトになるので余り考えなくてもいいでしょう。ただし、メンテナンスのことを考えると、データアクセスロジックが分散しているより、ここを見れば分かるってなっていたほうが望ましいと思います。