<beans>
<bean id="bean1" class="BeanClass1">
<property name="prop1" value="value1"/>
<property name="prop2">
<list>
<value>value2-1</value>
</list>
</property>
<property name="prop3">
<map>
<entry>
<key>
<value>key1</value>
</key>
<value>value1</value>
</entry>
<entry>
<key>
<value>key2</value>
</key>
<value>value2</value>
</entry>
</map>
</property>
</bean>
<bean class="BeanClass2" id="bean2">
<property name="prop" value="value"/>
</bean>
</beans>
在這個通用的XML結構裡,隱含了beans與bean各自對應的BeanFileDataModelInterface與BeanDataModelInterface。前者負責的是對所有bean的管理功能,後者提供的是每一個bean內部的property存取與管理,以及id、class的存取方法。同時對於bean裡的tag也必須全部定義對應的常數。
final static String NODE_NAME = "bean";
final static String NODE_ATTRID = "id";
final static String NODE_ATTRCLASS = "class";
final static String PROPERTY_NAME = "property";
final static String PROPERTY_ATTRNAME = "name";
final static String PROPERTY_ATTRVALUE = "value";
final static String VALUE_NAME = "value";
final static String LIST_NAME = "list";
final static String MAP_NAME = "map";
final static String MAP_ENTRY = "entry";
final static String MAP_KEY = "key";
final static String LISTMAP_NAME = "listmap";
BeanDataModelAbstract繼承自XMLDataModelAbstract,由於bean的child都會以property的形式存在,因此全部property相關的方法事實上都是對child操作。另外在property的物件定義上除了原本的list、map基本類型之外,再加上自己特有的listmap以符合不同的需求。BeanParserActionAbstract可以繼承XMLParserActionAbstract再改寫對property存取的部分。
BeanFileDataModel與BeanDataModel可以衍伸出一種極重要的變型:ObjectDataModel,它會依照bean裡class屬性定義的類別名稱創造出該類別的物件實體。實作時物件應繼承基本Data Model以擁有底層所規定的一切特性,同時在自有的介面上具有符合上層想要操作的所有動作內容。這個作法實現了所有資料物件的根源都來自同一個底層Data Model的理想。
註:這裡的內容並未實作在workspace裡,但是在之前的專案裡已驗證過可行。
沒有留言:
張貼留言