First we try, then we trust

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

《分析模式》第2、3章读书心得

假期里总算挤出点时间,将买了很长时间、看了几遍看不下去的《分析模式-可复用的对象模式》再啃一啃。这本书的难度实在是让我举步为艰,里面的模型更是需要有丰富的想象力和理解力。对于我这个标准的"代码"脑袋的家伙来说,总想将分析模式转换成代码以便于理解,可这还是不能将分析模式中众多的变化和思想表现出来。

网上关于《分析模式》的文章非常少,博客园的老翅寒暑为第2章的内容给出了一个代码模型,可以帮助我们理解其中的内容。而我建议的读书顺序是:第1章、附录A、第2章……,附录A中关于技术和符号的描述有助于我们理解书中的各种图示的含义,毕竟UML在这本书完全起草后才刚刚发布,该书使用的类型图使用了Odell的符号。在读完2、3章后,感觉《分析模式》比起《设计模式》更抽象,更注重思想,而这种思想只能通过从书中各种模式中意会。

我的资质虽说不上愚钝,但也决不聪明,刚刚读完第3章,相对于全书15章的内容来说只能算是管中窥豹。我希望我的足迹能够给后来的人有所帮助,因此将2、3章的心得体会放上来与大家一同分享,一来抛砖引玉,二来也希望更多的人能够关注《分析模式》。

体会一:

当你遇到纷繁复杂的关系不知如何处理时,可以考虑给这些关系"贴标签"

让我们以一个例子来说明贴标签的作用:

现在的高校教师有很多是"双肩挑",一方面担任行政职务,另外一方面又在学校任课。作为行政领导的教师会有一些"下属",这些下属也是教师。例如院长下面有系主任、系主任下面又有教研室主任。其实,院长、系主任、教研室主任都是教师,都担任课程。一个教师教多个学生,一个学生被多个教师教。为了描述他们之间的这种层次关系,我们可以通过以下UML图来描述:

现在让我们再引入更复杂的关系逻辑:除了普通本科学生外,还有研究生。而只有教授才可以带研究生,不管该教授是否是院长、系主任还是教师。我们如何通过模型描述这种关系呢?如果某些学校内部的科研组织,其成员要跨学院,一个教师又分属于不同的科研组织,如果……。可以看出来,随着关系复杂程度的递增,我们建模越来越困难。这个时候我们就可以请出"贴标签"的法宝了。

当关系越来越多,越来越错综复杂时,依靠委派关系进行聚合就显得力不从心,这个时候我们干脆将所有委派都去掉,将"关系"集中进行存放。如下图:

在关系档案中存储的就是关系"标签",每个标签上都记录了如下属性:委托方、责任方、之间的关系。有了这个关系档案后,我们就可以避免在教师、学生、系主任等角色间使用委派标识了。如果用UML图来表示这种改变的话就是:

团体是一个抽象类型,其子类包含各种类型的人员,团体持有对关系的一个委派,而关系中记录了委托方、责任方以及关系类型。

如果你想查某个教师的关系网的话,就可以到关系表中查找该教师作为委托方或责任方所对应的关系及其类型。或者你想查看所有师生关系,就可以直接到关系表中查找。通过将两个不同成员间贴上"关系标签",避免了引用造成关系难于扩充,难于处理的问题。

然而当前设计仍然存在一些问题,就是没有严格的"约束"。在当前设计中,由于委托方与责任方的类型都是团体,所以对于委托方与责任方都是学生时,我们也可以给它赋上一个"师生关系",毕竟该模型对委托方与责任方的类型没有任何约束力。为了使得模型更加完善,我们必须给"标签"加上约束,不是什么人都可以乱贴标签的。于是我们重新设计模型如下:

模型被分成了操作级和知识级,在知识级中记录了(1)都有什么样的标签;(2)标签的约束条件是什么,什么团体间才能具有该关系。

另外大家需要注意的是团体类型和团体并不是一一对应的,例如团体类型"教授",它有可能是院长、系主任也可能是教师。知识级的信息对操作级进行约束、控制。当出现新的科研关系时,我们仅仅需要做的工作是(1)添加一个新的关系类型:科研关系,(2)为该关系添加约束条件:其委托方与责任方是除了学生、研究生外的其它团体(尽管研究生也搞科研,我们这里暂不讨论)。

通过贴标签,我们就避免了增加委派关系带来的麻烦。当然,如果你的模型比较简单,只研究师生关系的话,就大可不必这么麻烦。

再来看看《分析模式(中文版)》第3章39页(英文版第41页)的一个例子,该例子用来记录病人到医院看病,记录检查的观测结果。看病的测量太多了,肺活量、血压、心率,单位可能相同也可能不相同。我们无法通过委派关系让一个病人持有所有检查的引用。况且当你看到一个检查结果是"A"时,也无法知道究竟是血型是A,还是评估等级为A级。因此我们将患者和测量结果间贴上标签,标签上记录如下信息:(1)患者姓名(2)测量内容(3)数量。当患者检测完后,手中只要持有一组标签就行了,而不用去管什么单位不单位的。究竟数量是否正确那是知识级所需要做的事情了。如下图:

这样,患者和数量间就被贴上了测量的标签,而该标签的使用必须满足观测类型中所规定的约束条件。

这是我对《分析模式》第2、3章内容的一部分体会,尽管书中介绍的内容要远比这个丰富。


参考文献:

Martin Fowler著,樊东平 张路 等译《分析模式 可复用的对象模型》。

 

posted on 2005-08-08 22:04  吕震宇  阅读(11466)  评论(18编辑  收藏  举报