2009年4月2日 星期四

U14 第二個元件(4)──讀寫Bean與Object檔案

<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裡,但是在之前的專案裡已驗證過可行。

沒有留言:

張貼留言