阅读者(十四):软件框架设计的艺术



阅读者(十四):软件框架设计的艺术

首先,如果你还未阅读本书,或者还未购买本书,我希望你能够做好心理准备,本书并不是为初学者所准备的。俗话说的好,没有金刚钻别揽瓷器活,要是没有一些相关的实践经验,阅读本书会有一定的困难,至少会浪费你的时间和金钱。这里我所说的相关经验并不是简单地开发一些小型网站。开发一个框架或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

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts