一.背景
在现在的网站中,接入的渠道是越来越多了,技术也是越来越先进,WAP, SMS,EMAIL, 传统的Web,
Socket等等,如果连数据库和LDAP也算接入的话,那在设计之中需要扩展的空间要做到很好
很好,才保证在添加新的渠道情况下不需要更多的修改代码甚至不改代码的情况。但可能吗?我想也不可能,但有什么方式可以更好的解决这种多渠道接入的框架的
完美性呢?
二.构架
【图一】
如图一所显示,在现有的所有接入都已经使用上的时候,设计者看的都眼花缭乱了,如果是为了凑份子,那这些程序怎么写都可以,而且也肯定可以实现,但维护起来就会比较痛苦,还是回到那个问题,怎么可以实现更完美呢?如图二显示:
【图二】
图二看起来象个八爪的章鱼,章鱼腿分别连接所有的接入渠道,进行连接所有这些渠道的核心就是这个章鱼的头xml(标准化越来越近了)Router,
Router在此的作用是沟通所有渠道,实现数据的路由,争强系统在构架上的扩展性和灵活性,好处会很多很多。称呼为xml(标准化越来越近了)
Router是因为如果不使用xml(标准化越来越近了)这种灵活而又规范的语言来做为数据传输的媒介,那Router的工作量也同样会成倍的增加,定义
好xml(标准化越来越近了)的规范后将为以后的扩展带来很多好处。
三.思想和模式
xml(标准化越来越近了)
Router的最初想法来自于计算机的主板和< >之中的Builder Pattern, 计算机主板的PCI
插槽定义了PCI的规范,只要你生产的卡符合PCI标准,那你插入到这个主板上就可以工作, 至于里面是怎么工作的则是已经封装好了. Builder
Pattern则是提出将复杂的构建分离开来,
一步一步的进行实现.xml(标准化越来越近了)Router是将这些复杂的渠道分离开来,一个个的进行表现.
Services思想:为了能和Router进行沟通,在这些渠道接入时必须定义统一的接口,这里成为Services, 只要符合Services规范的程序就可以接入到Router并进行数据的路由.
Factory模式和Composite模式
xml(标准化越来越近了)Router在实际的设计中将采用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">
<Prima(最完善的虚拟主机管理系统)rykey 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(标准化越来越近了)则可按这样的规则来定制
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240813180353098-2140851696.jpg)