一.背景
在現在的網站中,接入的管道是越來越多了,技術也是越來越先進,WAP, SMS,EMAIL, 傳統的Web, Socket等等,如果連數據庫和LDAP也算接入的話,那在設計之中需要擴展的空間要做到很好很好,才保證在添加新的渠道情況下不需要更多的修改代碼甚至不改代碼的情況。但可能嗎?想也不可能,但有什麼方式可以更好的解決這種多通道接入的框架的完美性呢?
二.架構
在現有的所有存取都已經使用上的時候,設計者看的都眼花撩亂了,如果是為了湊份子,那這些程式怎麼寫都可以,而且也肯定可以實現,但維護起來會比較痛苦,還是回到那個問題,怎麼可以實現更完美呢?在專案組的架構討論中,提出了路由的感想。
進行連接所有這些管道的核心就是這個章魚的頭XMLRouter,Router在此的作用是溝通所有管道,實現資料的路由,爭強系統在框架上的擴展性和靈活性,好處會很多很多。稱為XMLRouter是因為如果不使用XML這種靈活而又規範的語言來做為數據傳輸的媒介,那Router的工作量也同樣會成倍的增加,定義好XML的規範後將為以後的擴展帶來很多好處.
三.思想與模式
XMLRouter的最初想法來自於電腦的主機板和85ea4e7d89ef5b33fb2b54f3f35b8078>之中的Builder Pattern, 電腦主機板的PCI 插槽定義了PCI的規範,只要你生產的卡符合PCI標準,那你插入到這個主機板上就可以工作, 至於裡面是怎麼工作的則是已經封裝好了. Builder Pattern則是提出將復雜的構建分離開來, 一步一步的進行實現.XMLRouter是將這些複雜的渠道分離開來,一個個的進行表現.
Services思想:為了能和Router進行溝通,在這些渠道接入時必須定義統一的接口,這裡成為Services, 只要符合Services規範的程式就可以接入到Router並進行資料的路由.
Factory模式和Composite模式
XMLRouter在實際的設計中將採用Factory模式產生,Router由RouterFactory生產, 在投入使用時將放置於佇列,傳遞資料和接收資料以及傳回資料都從佇列中取對應的Router來呼叫,應用了Composite的模式.
四.XML設定檔
XML檔對於Router之中的使用分為兩個部分, 第一個是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節點代表需要存取的通道, service節點包含connector子節點, 子節點的配置根據type來區分, 如果是database則包含url, user, passwd,driver等屬性, 如果是socket則包含port, maxthread等屬性, 屬性值可以根據自己的定義來配置.
另一種XML檔則是XML交易資料檔,用於在所有的services中傳遞資料,每個Services自己包涵一個對應的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> 相应的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>
以上是xml實作多通路接取網站的架構的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!