<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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包里面定義的都是關(guān)于“news channel objects”的接口---實(shí)際上就是RSS協(xié)議中的channel和item元素。經(jīng)過一個(gè)多小時(shí)查看源代碼和閱讀API,發(fā)現(xiàn)Informa對(duì)core包的設(shè)計(jì)有如下特點(diǎn):

    core包中的元素被分為標(biāo)記接口、實(shí)體接口、行為接口

    A.標(biāo)記接口

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

    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的規(guī)范后我終于明白了:

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

    B.實(shí)體接口

    既然標(biāo)記接口是用來表達(dá)元數(shù)據(jù)的標(biāo)記的,那么實(shí)體接口就是這些元標(biāo)記接口的組合,再加上一些不能共享或獨(dú)有的元素了。請(qǐng)看core包里面最重要的兩個(gè)實(shí)體接口:ChannelIF和ItemIF。除了繼承上面標(biāo)記接口的元素外,他們分別又根據(jù)RSS協(xié)議中定義的元素,增加了其他相應(yīng)元素的定義。

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

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

    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是邏輯組織形式,就像我們平常操作系統(tǒng)中的目錄一樣。表明該channel屬于哪個(gè)(些)目錄。
    ★ChannelGroupIF是容器概念,可以看做是所有Channel的一個(gè)容器,甚至在某些情況下可以是代表了一個(gè)從持久層獲取的XML文檔的根節(jié)點(diǎn)。表示的是“Channel集”這些對(duì)象

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

    ItemMetadataIF
    這是一個(gè)用來描述Item非業(yè)務(wù)信息的節(jié)點(diǎn),它包含了該item是否已讀,還有優(yōu)先級(jí)(可以用于item的排序)等信息

    TextInputIF
    這是RSS協(xié)議中定義的一個(gè)用于幫助用戶搜索指定關(guān)鍵字的節(jié)點(diǎn),實(shí)現(xiàn)者會(huì)展現(xiàn)為一個(gè)文本輸入框來接受用戶的輸入

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

    C.行為接口

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

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

    ChannelParserIF:用于讀入某個(gè)指定協(xié)議格式的文件,并產(chǎn)生對(duì)應(yīng)的Channel對(duì)象
    ChannelBuilderIF:允許解析器(Parser)根據(jù)需要生成不同格式的Channel,會(huì)被Parser調(diào)用
    ChannelExporterIF:允許根據(jù)需要將內(nèi)存中的Channel導(dǎo)出為不同的形式
    ChannelSubscriptionIF:用來決定當(dāng)Channel源出現(xiàn)更新且階段更新時(shí)間來臨時(shí),Channel是否需要更新內(nèi)容

    ChannelObserverIF:用來監(jiān)聽Channel對(duì)象上發(fā)生的事件并作出相應(yīng)的反應(yīng)
    ChannelObservableIF:用來通知監(jiān)聽者發(fā)生了某個(gè)事件



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

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 在线亚洲v日韩v| 亚洲精品在线免费观看视频| 18禁男女爽爽爽午夜网站免费| 亚洲精品无码激情AV| 真正全免费视频a毛片| 免费午夜爽爽爽WWW视频十八禁| 亚洲精品无码mv在线观看网站| 亚洲一区二区三区国产精品无码| 永久看日本大片免费35分钟 | 亚欧免费视频一区二区三区| 亚洲综合视频在线| 一级特黄aaa大片免费看| 99久久免费国产精品特黄| 亚洲一区中文字幕在线观看| 成年女人色毛片免费看| 亚洲美女人黄网成人女| 国产在线观看免费av站| 久久亚洲国产午夜精品理论片| 99re6免费视频| 国产AV无码专区亚洲Av| 免费国产黄网站在线观看可以下载| 亚洲日本在线看片| CAOPORN国产精品免费视频| 亚洲?V乱码久久精品蜜桃 | 无套内谢孕妇毛片免费看看| 亚洲人成影院在线观看| 免费国产黄网站在线观看可以下载 | 亚洲免费在线视频观看| 亚洲GV天堂GV无码男同| 欧美a级成人网站免费| 老司机午夜在线视频免费| 亚洲精品少妇30p| 欧亚精品一区三区免费| 成人久久久观看免费毛片| 免费看国产一级特黄aa大片| 免费看黄的成人APP| 亚洲a级片在线观看| 亚洲午夜无码片在线观看影院猛| 91精品国产免费久久国语麻豆| 亚洲欧洲日产国码久在线观看| 国产成人A在线观看视频免费|