では、Transfer を利用するように書き換えてみる。
ColdSpring.xml で設定していた、販売商品のマスタデータをデータベースから取得するようにするため、下記のように書き換え。
<bean id="itemArrayBean" class="shopping.model.ItemArrayBean">
<property name="itemArray">
<list>
<map>
<entry key="name"><value>光学式マウス</value></entry>
<entry key="price"><value>2600</value></entry>
</map>
<map>
<entry key="name"><value>ボール式マウス</value></entry>
<entry key="price"><value>1100</value></entry>
</map>
<map>
<entry key="name"><value>レーザー式マウス</value></entry>
<entry key="price"><value>4800</value></entry>
</map>
</list>
</property>
</bean>
↓
<bean id="itemArrayBean" class="shopping.model.ItemArrayBean" autowire="byType" />
マスタデータを設定する必要が無くなるため、ばっさり、削除。
その代わり、AutoWire で Bean を注入。
何を注入するのか。shopping.model.CartProcess に以下のコードを追加する。
<cffunction name="setOrmService" access="public" returntype="void" output="false">
<cfargument name="ormService" type="transfer.TransferFactory" required="true">
<cfset variables.transfer = arguments.ormService.getTransfer() />
</cffunction>
前回設定した ormService を渡して取得する Transfer オブジェクトを利用してデータベースからデータを取得するようにするのである。
この ormService は、type を見ればわかるように、transfer.TransferFactory である。
一方、ormAdapter の正体は、ModelGlue.unity.orm.transfer.TransferAdapter で、どうやら、Model-Glue が用意してくれたもののようだ。
いっそのこと、抽象クラスかインターフェースかなんかにキャストして、O-R マッピングで汎用的に使えるようになっていれば、おもしろそうだけど、俺が何か間違っているのだろうか。
shopping.model.ItemArrayBean で Transfer オブジェクトを受け取り、データを取得して、既存の戻り値と同じものを返せば、商品一覧をデータベースから取得して表示するだけなら、書き換えるプログラムは、この ItemArrayBean だけとなる。