使用XML實(shí)現(xiàn)多渠道接入網(wǎng)站的構(gòu)架
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2008-10-17 20:15:59 作者:佚名
我要評(píng)論
其實(shí)寫這篇文章的目的最多的想法是把自己在去年在瑞士做項(xiàng)目時(shí)應(yīng)用的一個(gè)框架給展現(xiàn)出來讓大家共享,但我又有點(diǎn)擔(dān)心我的表達(dá)能力不能將我在里面使用的思想很好的表現(xiàn)出來,所以遲遲 不敢下筆,最后還是下了決心,寫吧, 不行就在好好改改,當(dāng)然也希望大家多提些意見。
其實(shí)寫這篇文章的目的最多的想法是把自己在去年在瑞士做項(xiàng)目時(shí)應(yīng)用的一個(gè)框架給展現(xiàn)出來讓大家共享,但我又有點(diǎn)擔(dān)心我的表達(dá)能力不能將我在里面使用的思想很好的表現(xiàn)出來,所以遲遲 不敢下筆,最后還是下了決心,寫吧, 不行就在好好改改,當(dāng)然也希望大家多提些意見。
一.背景
在現(xiàn)在的網(wǎng)站中,接入的渠道是越來越多了,技術(shù)也是越來越先進(jìn),WAP, SMS,EMAIL, 傳統(tǒng)的Web, Socket等等,如果連數(shù)據(jù)庫和LDAP也算接入的話,那在設(shè)計(jì)之中需要擴(kuò)展的空間要做到很好 很好,才保證在添加新的渠道情況下不需要更多的修改代碼甚至不改代碼的情況。但可能嗎?我想也不可能,但有什么方式可以更好的解決這種多渠道接入的框架的完美性呢?
二.構(gòu)架
【圖一】
如圖一所顯示,在現(xiàn)有的所有接入都已經(jīng)使用上的時(shí)候,設(shè)計(jì)者看的都眼花繚亂了,如果是為了湊份子,那這些程序怎么寫都可以,而且也肯定可以實(shí)現(xiàn),但維護(hù)起來就會(huì)比較痛苦,還是回到那個(gè)問題,怎么可以實(shí)現(xiàn)更完美呢?在項(xiàng)目組的構(gòu)架討論中,我提出了路由的感念,并得到了大
家統(tǒng)一的認(rèn)可,如圖二顯示
【圖二】
圖二看起來象個(gè)八爪的章魚,章魚腿分別連接所有的接入渠道,進(jìn)行連接所有這些渠道的核心就是這個(gè)章魚的頭XMLRouter,Router在此的作用是溝通所有渠道,實(shí)現(xiàn)數(shù)據(jù)的路由,爭(zhēng)強(qiáng)系統(tǒng)在構(gòu)架上的擴(kuò)展性和靈活性,好處會(huì)很多很多。稱呼為XMLRouter是因?yàn)槿绻皇褂肵ML這種靈活而又規(guī)范的語言來做為數(shù)據(jù)傳輸?shù)拿浇?那Router的工作量也同樣會(huì)成倍的增加,定義好XML的規(guī)范后將為以后的擴(kuò)展帶來很多好處.
三.思想和模式
XMLRouter的最初想法來自于計(jì)算機(jī)的主板和<<Design Pattern>>之中的Builder Pattern, 計(jì)算機(jī)主板的PCI 插槽定義了PCI的規(guī)范,只要你生產(chǎn)的卡符合PCI標(biāo)準(zhǔn),那你插入到這個(gè)主板上就可以工作, 至于里面是怎么工作的則是已經(jīng)封裝好了. Builder Pattern則是提出將復(fù)雜的構(gòu)建分離開來, 一步一步的進(jìn)行實(shí)現(xiàn).XMLRouter是將這些復(fù)雜的渠道分離開來,一個(gè)個(gè)的進(jìn)行表現(xiàn).
Services思想:為了能和Router進(jìn)行溝通,在這些渠道接入時(shí)必須定義統(tǒng)一的接口,這里成為Services, 只要符合Services規(guī)范的程序就可以接入到Router并進(jìn)行數(shù)據(jù)的路由.
Factory模式和Composite模式
XMLRouter在實(shí)際的設(shè)計(jì)中將采用Factory模式產(chǎn)生,Router由RouterFactory生產(chǎn), 在投入使用時(shí)將放置于隊(duì)列中,傳遞數(shù)據(jù)和接收數(shù)據(jù)以及返回?cái)?shù)據(jù)都從隊(duì)列中取相應(yīng)的Router來調(diào)用,應(yīng)用了Composite的模式.
四.XML配置文件
XML文件對(duì)于Router之中的使用分為兩個(gè)部分, 第一個(gè)是Router的配置,如:
<?xml version="1.0" ?>
<services>
<!-- database Service -->
<service name="database" type="database" class="com.web.service.DBService">
<connector
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://192.168.0.179:1433" user="test"
passwd="test" />
</service>
<!-- Web Service-->
<service name="web" type="web" class="com.web.service.WebService" >
<connector />
</service>
……
</services>
這是Router的配置文件, service節(jié)點(diǎn)代表需要接入的渠道, service節(jié)點(diǎn)包含connector子節(jié)點(diǎn), 子節(jié)點(diǎn)的配置根據(jù)type來區(qū)分, 如果是database則包含url, user, passwd,driver等屬性, 如果是socket則包含 port, maxthread等屬性, 屬性值可以根據(jù)自己的定義來配置.
另一種XML文件則是XML交易數(shù)據(jù)文件,用于在所有的services中傳遞數(shù)據(jù),每個(gè)Services自己包涵一個(gè)相應(yīng)的XML文件,比如webtrans.xml格式如下:
<?xml version="1.0" ?>
<transaction>
<trans name="addDoc" service="database" method="insert">
<property name="createtime" type="timestamp"/>
<property name="creatorid" type="long"/>
<property name="doctypeid" type="int"/>
<property name="docstatusid" type="int"/>
</trans>
</transaction>
相應(yīng)的dbtrans.xml格式如下
<trans name="addDoc" table="TDOC_DOCS" method="insert">
<primarykey name="docid" />
<set>
<property name="createtime" type="timestamp"/>
<property name="creatorid" type="long"/>
<property name="doctypeid" type="int"/>
<property name="docstatusid" type="int"/>
</set>
</trans>
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28- XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下2021-11-30
- 這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下2016-06-24
- XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析2016-06-24
- 這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺(tái)與源代碼查看,需要的朋友可以參考下2016-02-16
- 這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型,文中舉了JavaScript解析DOM對(duì)象的例子,需要的朋友可以參考下2016-02-15- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15

