posts - 262,  comments - 221,  trackbacks - 0
          Informa的core包介紹如下:

          “This package contains interfaces for the news channel objects, it builds the core API for all news channel storage implementation. ”

          從上面這句話來看,core包里面定義的都是關于“news channel objects”的接口---實際上就是RSS協議中的channel和item元素。經過一個多小時查看源代碼和閱讀API,發現Informa對core包的設計有如下特點:

          core包中的元素被分為標記接口、實體接口、行為接口

          A.標記接口

          在core包的下面,有一系列以WithXxxMIF命名形式的借口。一開始我搞不懂這是什么設計理念,后來當我查看了另外兩個接口后終于明白這樣設計的意圖了

          ChannelIF的接口定義:
          public interface ChannelIF extends WithIdMIF, WithTitleMIF, WithElementsAndAttributesMIF, WithLocationMIF, WithCreatorMIF, WithCategoriesMIF, WithDescriptionMIF, WithSiteMIF, ChannelObservableIF

          ItemIF的接口定義:
          public interface ItemIF extends WithIdMIF, WithTitleMIF, WithElementsAndAttributesMIF, WithCreatorMIF, WithCategoriesMIF, WithDescriptionMIF, 
          WithLinkMIF, WithChannelMIF, WithUnreadMIF

          可以看到不論是Channel還是Item,他們都繼承了一系列的meta/marker-interface。例如:WithIdMIF,WithTitleMIF,WithDescriptionMIF等等。為什么呢?通過翻查RSS 2.0的規范后我終于明白了:

          在RSS 2.0規范中,channel和item都有大量命名相同的標記(或者稱為子節點也好),如果都為channel和item都定義一套那么顯得設計過于冗余了,所以作者的意圖應該是:把這些相同的節點抽取出來,作為元節點來定義。這樣channel和item就可以共享這些定義了,實現動態的組合。而且設想一下,假設以后協議有變動,改變起來也很容易。這就像搭積木一樣。

          B.實體接口

          既然標記接口是用來表達元數據的標記的,那么實體接口就是這些元標記接口的組合,再加上一些不能共享或獨有的元素了。請看core包里面最重要的兩個實體接口:ChannelIF和ItemIF。除了繼承上面標記接口的元素外,他們分別又根據RSS協議中定義的元素,增加了其他相應元素的定義。

          例如在ChannelIF中有addItem,setLanguage之類的特有于Channel的方法定義。而在Item中則有setComments,setSource方法的定義。

          在實體接口中有兩個需要注意的地方:CategoryIF和ChannelGroupIF。這兩個接口都是對Channel的組織形式,僅從定義難以區分它們的不同:

          CategoryIF:
          public interface CategoryIF extends WithIdMIF, WithTitleMIF, WithChildrenMIF<CategoryIF>

          ChannelGroupIF:
          public interface ChannelGroupIF extends WithIdMIF, WithTitleMIF, WithChildrenMIF

          比較API說明后才有些理解:

          CategoryIF

          This interface is implemented by objects representing categories in which channels could be organised in the news channel object model.

          ChannelGroupIF
          Interface to allow to implement a container of channels that may be used by a channel registry (through a front-end) or as the entry point for an application using this library. A ChannelGroupIF object may also reflect the root element of a XML file persisted from the channel object model.

          ★CategoryIF是邏輯組織形式,就像我們平常操作系統中的目錄一樣。表明該channel屬于哪個(些)目錄。
          ★ChannelGroupIF是容器概念,可以看做是所有Channel的一個容器,甚至在某些情況下可以是代表了一個從持久層獲取的XML文檔的根節點。表示的是“Channel集”這些對象

          除了上面介紹的這幾個,還有幾個需要提到的:

          ItemMetadataIF
          這是一個用來描述Item非業務信息的節點,它包含了該item是否已讀,還有優先級(可以用于item的排序)等信息

          TextInputIF
          這是RSS協議中定義的一個用于幫助用戶搜索指定關鍵字的節點,實現者會展現為一個文本輸入框來接受用戶的輸入

          UserIF
          RSS定義中并沒有user的概念,這是Informa用來存儲用戶定制列表的輔助類,里面定義了add/removeChannelSubscription方法

          C.行為接口

          在core包中還定義了一系列對Channel進行操作的行為接口,它們多數都是以ChannelXxxIF形式來命名的。包括了

          IdGeneratorIF:用來根據不同的策略生成各種ID

          ChannelParserIF:用于讀入某個指定協議格式的文件,并產生對應的Channel對象
          ChannelBuilderIF:允許解析器(Parser)根據需要生成不同格式的Channel,會被Parser調用
          ChannelExporterIF:允許根據需要將內存中的Channel導出為不同的形式
          ChannelSubscriptionIF:用來決定當Channel源出現更新且階段更新時間來臨時,Channel是否需要更新內容

          ChannelObserverIF:用來監聽Channel對象上發生的事件并作出相應的反應
          ChannelObservableIF:用來通知監聽者發生了某個事件



          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2009-12-21 22:09 Paul Lin 閱讀(1253) 評論(0)  編輯  收藏 所屬分類: J2SE
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永兴县| 大姚县| 河北区| 镇坪县| 长岛县| 米易县| 富民县| 屯留县| 上杭县| 临沧市| 五大连池市| 肥乡县| 皋兰县| 申扎县| 太仓市| 阳城县| 泽州县| 清徐县| 和林格尔县| 吴江市| 前郭尔| 泸定县| 永春县| 西丰县| 台安县| 呼图壁县| 株洲县| 兰考县| 巴彦淖尔市| 涞水县| 蓬莱市| 延长县| 海伦市| 陆河县| 德清县| 肥城市| 璧山县| 秦安县| 廊坊市| 报价| 丹阳市|