ひがやすを技術ブログ

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

ダイコン時代の設計手法 - Logicがない場合

これは、UI仕様書(Validationつき)とエンティティ仕様書とを明示的に関連づけてしまい(一枚にできないか)、バウンダリからサービスを経由しないで(デザイン的にはスルーして)S2Daoをたたくことで実現できる(Excelでうんぬんを突き詰めたい)。

これまでバウンダリから呼び出されるコントロール
(システムが提供するサービス)をロジックと
永続化(Dao)に分けて処理することをずっと提案してきた。
アーキテクチャ的にはきれいなのだけど、心にはくすぶるものがあった。
だって、たいていの画面ってロジックなんかなくて、Daoをたたけば良いのが
ほとんどだからだ。
単にDaoに処理を委譲しているロジックでも実際の案件では、
仕様書もテストもインターフェースも実装クラスも作らなければならない。
無駄なコストは削らなければならない。
バウンダリからDaoを呼ぶようにしても良いけど、
バウンダリにコントロールの実装クラスは意識させたくない。
最初は単純にDaoを呼べば良かったケースが後から仕様が変わり、
Logicを入れたくなったときに、バウンダリに影響は与えたくない。
Daoにももちろんコントロールを意識させたくない。
それではどうすれば良いのか。orz


考えましたよ、考えた。そこでAOPですよ。
単に委譲するだけの場合は、DelegateInterceptorを使って処理を
透過的に委譲するのです。


<component class="EmployeeLogic">
<aspect>j2ee.requiredTx</aspect>
<aspect>
<component class="DelegateInterceptor">
<property name="target">employeeDao
<initMethod>
#self.addMethodMap("myMethodName", "yourMethodName")
</initMethod>
</component>
</aspect>
</component>
<component name="employeeDao" class="EmployeeDao">
<aspect>
<component class="S2DaoInterceptor"/>
</aspect>
</component>