レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

SessionFacadeのアンチパターン

ビジネスロジック層がオブジェクト指向にならないとなげく同僚から相談を受けたことがある。
チームはオブジェクト指向に習熟しているのに、なぜかオブジェクト指向のメリットがみえないという。

その原因の一つには、J2EEアンチパターンがあるのではないか

たとえば、私が良く目にするアンチパターン
Session Facadeパターンを使った時に見られるアンチパターンだ。

まずSessionFacadeの意味は以下のようなものだろう。


ところが、SessionFacadeは次のようなアンチパターンに陥る危険性をはらんでいる。

※文字が読みにくいので以下に注釈

FaçadeとDomainObjectが1対1で作られ、一つのDomainオブジェクトで、1ユースケースに対応するすべての処理が記述される。Façadeがビジネスロジック設計の中心となり、手続き型ビジネスロジックになる。

DIコンテナ導入により、このアンチパターンに陥る危険性は軽減するように思う。
DI時代の現在では、杓子定規にFacadeを用意するような設計はしないだろう。

ただ、DIコンテナにエントリーするレベル(サービス層だろうか)のオブジェクトが
このSessionFacadeと同じようなアンチパターンに陥ることも考えられるなぁ。