トランザクションスクリプトとドメインモデルと。
この区別は、呼び出し側からどう呼ぶかの区別じゃないかという結論。言い換えれば、どのようにカプセル化するかの違い。
まず1つのアーキテクチャパターンはTransaction Scriptパターンです。一言でいうと「ドメインロジックを機能別に分け1つのプロシージャとして実装」といった感じです。
OTN Japan - 今だからデータ・アクセスを真剣に考える! 第1回
サービス志向的という点のほうが大事っぽい。
Transaction Scriptって何よ - BitArts
そう思う。この間書いたソースでも、"Service"クラスとして定義したくらいだし。
public void useTransactionScript() { transactionscript.Service service = new transactionscript.Service( new transactionscript.Finder(DB.connect())); System.out.println(service.cuillenMonths("hatena")); }
他方、ドメインモデルの場合は、利用者はオブジェクトを取出し、オブジェクトに対して必要なメッセージを送って処理を促す。
public void useDomainLogic() { domainlogic.Mappers mappers = new domainlogic.Mappers(DB.connect()); System.out.println( mappers.customerMapper.find("hatena") .cuillenMonths()); }
WEBアプリケーションの場合
サーブレットアクションはトランザクションスクリプトだし、RESTはあまり理解してないけどドメインモデルに比較的近い気がする。
例えば↓みたいなリクエストを送れるとしたら、ドメインモデルなWEBアプリケーションっぽい。かも。
http://example.com/customerMapper/find("hatena")/cuillenMonths/
<return> <meta> <address>/customerMapper/find("hatena")/cuillenMonths/</address> </meta> <value class="Set<Month>"> <month> <y>2008</y> <m>3</m> </month> <month> <y>2008</y> <m>5</m> </month> <value> </return>
プロパティとメソッドの区別を明確にする必要はありそう。