首先,如果你还未阅读本书,或者还未购买本书,我希望你能够做好心理准备,本书并不是为初学者所准备的。俗话说的好,没有金刚钻别揽瓷器活,要是没有一些相关的实践经验,阅读本书会有一定的困难,至少会浪费你的时间和金钱。这里我所说的相关经验并不是简单地开发一些小型网站。开发一个框架或API和开发应用系统还是有很多不同的。
全书分为三个部分――理论与理由、设计实践与日常生活,阅读指南给出了一个很好的建议,如果你对那过于理论充满哲学论调的第一部分不感冒,不妨先从第二部分开始,之后再来阅读开头的理论部分。但我的建议还是按照顺序阅读吧,至少从一开始你就能知道我们和自己的前辈所处的环境不同,几何学是多么的纯粹,什么才是优雅的程序语言,为什么说现在的程序员中有一大部分是在"针对性无绪"(这里作者并没有贬低不深入了解很多内容也可以完成任务的意思),好歹你可以知道什么是API,什么是SPI,光这些知识就可以让你受益匪浅了。再不然,那张Will Code HTML For Food的插图也能博你一笑,不要把自己看得太高了。
"博学"一词似乎总与"大师"行影不离,不少人虽然从事IT行业,但却拥有艺术学位,有的在物理化学方面颇有造诣。Jaroslav在序言中就用他的天体物理和历史知识将我折服了,通过那个恒星的比喻,让我对API的设计有了新的认识。
在设计实践部分中,你会读到很多技巧性的内容,有些是你了解的,有些是你知其然不知其所以然的,有些是你所未曾了解过的,更有一些是与你理解中的知识所冲突的……这也就是为什么说开发一个框架不同于开发一套应用系统。知道设计模式的人都可以说出如何实现工厂模式,但又有多少人可以说清楚工厂方法优于构造方法的?用过Sonar等类似工具的人都会知道,它们会提示你将一些类声明为final的,但你又可曾想过其中的原因?整天把"面向接口编程"挂在嘴边,那究竟什么是接口?不要狭义地认为这个接口就是Java中的interface,它的含义远不局限于此,设计一个好的接口也是有讲究的。这些问题的答案都可以在设计实践部分里找到。
现在Spring基本成为了多数Java应用系统开发中的标配,谈及框架几乎必定会涉及到它,它把依赖的概念带给了大家,也提供了组件和服务等模块化的思想(当然和OSGi还是有所区别的)。在"模块化架构"一节中,Jaroslav专门介绍了NetBeans的Lookup机制、Java 6的ServiceLoader和Spring提供的依赖注入,可以让人更好地理解组件注入和服务定位,至少可以更好地理解Spring的依赖注入机制。本节还提及了扩展和扩展点,关于这个概念我在初次接触时也曾有过怀疑,真的很有用么,不用也挺好啊,但只有真的遇到了特定的场景才能体会到设计扩展点的用意,读到这段真的让我深有感触。
Read full article from 阅读者(十四):软件框架设计的艺术
No comments:
Post a Comment