我自闲庭信步,悠然自得,不亦乐乎.

                                       ------ Keep life simple
GMail/GTalk/MSN:huyi.zg@gmail.com

 

XmlPullParser和SocketReader的思索

今天再次Review了代码,但思路却因此而开始混乱。

从名字上解这两个对象:
XmlPullParser当然是以“拉”的方式从流中获取信息。
SocketReader单从字面上理解,功能自然是从Socket上获取字节流。

“单一职责原则”,在几年前就在我脑子里打下了烙印。The Simpler The Easier,既是我做人的原则,也是我做程序的原则。常理上讲,我应该尽力维护这个原则,让上述两个对象都尽可能的简单。  在wildfire中,也有SocketReader,然而它的SocketReader却不是那么简单,功能远远超出了字面意义。大部分业务都要靠这个来控制,分配。
受它影响(之前我通读了wildfire的所有源码),在tim中也给SocketReader的子类ClientSocketReader等加上了重担。因为它掌握了太多的信息,应该说大多数信息都暴露在这个地方,Session,Socket,SocketConnection,我实在找不出理由不让它参与进业务。也许,这是OO的一种失败,但我一时也找不到新对象来管理这一系列的相关信息。
XmlPullParser则和SocketReader息息相关,因为Socket中Read出来的东西首先就要经过Parser,才能从字符流形成有用的东西。
在原先的设计中,XmlPullParser被SocketReader所包含,并提供了get方法暴露给外界。在很多事件分配的地方,都要XmlPullParser提供信息,之前,都是通过SocketReader间接获取xpp,高层真的需要直接使用xpp吗?我觉得不然,高层需要的信息完全可以通过SocketReader来提供。
那么该怎么设计两者的关系呢?是包含,还是父子?我倾向于包含,但懒惰促使我选择了父子。目前看起来,父子关系并没有带来什么坏的影响,如果有必要,今后再重构吧。
现在结构似乎更为清晰了,SocketReader的子类(ClientSocketReader。。。)会负责解析流,并根据解析出的内容进行第一层处理,如选择下级处理器或者是直接计算业务,或者是进行转发。。。根据不同的子类,表现不同的业务族(Client,Server,Agent。。。)

posted on 2006-03-06 23:38 HuYi 阅读(825) 评论(0)  编辑 收藏 引用 所属分类: Server


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

统计

常用链接

留言簿(12)

随笔分类

相册

收藏夹

友情链接

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜