前两个月大概翻过 《
应用框架的设计与实现——.NET平台》一书,也曾在MSN space上发过一个简短的书评。因为刚刚看到某人的一篇书评,感觉赞誉太过。于是把以前的书评翻出来转贴一下,如有观点过于偏激权且博大家一笑。
http://spaces.msn.com/members/flierlu/Blog/cns!1pQ1oe7hJhEc4MgjNgGwRvvA!153.entry
9月18日 |
|
|
|
《应用框架的设计与实现——.NET平台》 |
用一周左右时间零零碎碎抽空把 《
应用框架的设计与实现——.NET平台》一书翻了一遍,感觉作者 Xin Chen 的确有一些自己的想法,但有些问题并没有想的非常明白。在应用框架的层面来说,书中涉及的范围基本上是较为全面的,但就如其示例实现 SAF (Simplified Application Framework) 的名字一样,有些问题的思考和解决方法过于简单。
从全书的整体布局来说,首先是作者的全局理解不错,前三章对应用框架的分析和理解大部分还是很到位的。相对很多上来就大谈实现技术的所谓企业级开发书籍来 说,能想到并且言之有物的将 blueprint 先说明白,说明作者在整体框架的发展上有过较多的思考。而实际上这个层面的思考,是 Windows 平台下企业级开发所最为欠缺的。而从第4章到第15章,每章介绍一个框架的主要构成部分,先原理后实现还是挺不错的,最起码能够浅显易懂,呵呵。不过个人 感觉对基础性支持介绍的太多了,不如改为结合实际项目的应用场景分析。毕竟能有目的性看这种书籍的读者,大部分都不会存在技术性知识的缺乏。也不知是否书 籍定位的问题,感觉很多问题作者是想到但并没有讲明白,给出的解决方法也仅仅停留在思路层面,很多地方缺乏实用性和完整性。
第4章介绍类工厂服务,给出一个基于 reflection 机制的可配置类工厂实现思路。不过居然没有提及任何 IoC 方面的知识,真难以想象这是一本2004年才出版的书。毕竟将构建对象与使用对象解耦,只是容器最基本的一个层面的功能,更高层面的对象依赖关系管理、配置管理、AOP 支持以及服务生命期管理等等,才是一个真正的企业级容器所必须的。
第5章介绍缓存服务,给出一个基于 hashtable 的缓存实现思路。值得肯定的是明确提出了存储策略的引入,这为平滑支持基于外部存储和基于cluster 的缓存提供了思路,实际上 Java 阵营的大部分 Cache 实现也是类似。亮点是采用 XML DOM 树作为 key 的存储机制的思路,通过 xpath 来定位存储内容,相对于平面的基于 key 对象自身可比较性的思路,有着其特有的易用性。可惜给出的参考实现只能用简陋来形容,作为学习用的范例还凑合。
第6章介绍配置服务,基本上就是基于 CLR 现有配置架构,没有太多新意。直接用 Enterpise Library 的相关 Block 是更好的选择。感觉 windows 平台的开发者在 XML 处理方面的思路太僵化了,来来去去都是 MS 那套机制,不像 Java 阵营百花齐放,digester 与 xstream 齐飞,不同模式让人有选择余地。
第7章介绍事件通知服务,给出一个集中事件分发服务的雏形。这块对事件分发和异步执行的好多想法很不错,但实现的方式太简单了。虽然统一的中间服务简化编 程模型,但在参数传递、传送拓扑、底层协议等等很多方面受限。某些时候网状拓扑比这种星状拓扑的灵活性更大,或者基于总线的思路也更先进。这方面 ESB 的思路应该是大势所趋,MS 方面就看 Indigo 的本事了。
第8章介绍 Windows 服务,说白了就是用一个 Windows Service 做容器来运行任务。能明确提出这一点来,可以说作者对如何将应用框架与 Windows 平台结合做过一些思考,可惜仅仅在这儿有所体现,而可以做努力的方向还很多。而且其对服务支持仅仅停留在运行容器支持层面,基本上没有考虑如何在服务与服务之间、服务与使用者之间,提供无缝交互的支持,而隔离的服务对于框架来说是孤立的。
第9章介绍消息队列服务,基本上就是对 MSMQ 和 MQSeries 的简单封装。如果能够考虑消息路由、同步模式等等高级特性,可能会更加实用一些。这一章实际上可以跟事件通知服务合并到一起,毕竟他们是为了解决类似的问题,不应该仅仅以实现技术来划分。
第10、11、12章介绍授权、身份验证、加密服务,基本上就是对 CLR 现有机制的包装和整理。亮点是明确提出应该将授权等定义与具体代码实现分离,并给出一个简单但可用的实现。真不明白这么简单的一个道理,为什么 MS 到现在就是不明白 :S 此外这儿单独提出了对身份扮演的支持,但在与架构一级的整合上力度不够,仅仅给出实现一级的方法。
第13章介绍事件服务,主要包括如何通过 COM+/DTC 使用分布式事务。亮点是明确提出抽取独立调度类提供 COM+ 事务与隔离性支持,避免在实现代码一级静态定义。不过作者似乎对 COM+ 1.5 不是太熟悉,居然没有用新增的服务域的特性。而且他在抽取事务与隔离性支持时,使用了设计上巨龌龊的枚举组合方法,用 4x5=20 个服务类来表示所有组合。其实完全可以通过动态类生成方式,提供更为幽雅的实现。而且事务的定义,也应该有相应的配置文件级支持,作者好像把这块也忽略掉了,而前面几个模块缺都有,真是奇怪。
第14、15章介绍文档层和工作流服务,基本上就只是简单介绍了一下概念,感觉是敷衍了事 :S 而且两章罗罗嗦嗦说了半天,说白了都是用的责任链的模式,还挂着个工作流的羊头。估计可能是因为作者有 biztalk 的背景,这部分大部分工作用现成工具完成了吧。
总体来说此书还是一本非常值得一读的入门级应用框架设计书籍,能够非常清晰明确的提出问题并给出简单的参考实现,但在问题思考的深度、广度,以及解决方法的时效性和先进性方面,只能说是一般而已。相对于 SpringFramework 作者那两本重量级作品,此书也就是大概翻翻就行了。