读者也许会想:“在程序开发领域中,讲述软件设计的技术图书是不是太多了?”,的确如此,因而你有理由来质疑,为什么我还要写一本这样的书而你又凭什么还要再读这样一本书?说起软件设计的经典图书,那本由GoF执笔的《设计模式》,对每一个想要掌握面向对象技术的开发人员来说,已经成为案头必备之书。此外,对于不同类... 查看全部[ *** ]
为什么说市场上现有的设计图书还不够用呢?这是因为设计框架或者通用类库是一件非常复杂的事情,其复杂度与自行设计内部系统不可同日而语。打个比方,在一台服务器上基于一个小型数据库来搭建一个Web应用之类的小系统,就和盖一间房子差不多。当然,有些房子可能很小,也有些房子会很大,有时也许是一座摩天大楼。这些建... 查看全部[ API设计的特殊所在 ]
如果此时你正在书店面对这本书,在买与不买之间犹豫不决,那是因为你无法判断这本书对你是否有用。老实说,这点我帮不了你,因为我不是你。但我可以告诉你我自己为什么需要这本书,以及我写作该书的缘由,这样也许可以帮助你决定是否应该购买此书。我在设计NetBeans框架的API时,就像在一片迷茫中寻找光明,总是... 查看全部[ 读者对象 ]
NetBeans是一个使用Java语言开发的IDE框架,我的大部分与API有关的知识都是从这个项目中学到的。如果由我来回答这个问题:“这本书是否有益于那些非Java的开发?”那么答案仍然是肯定的。对于如何评价API设计是否良好,本书给出了很多准则,这些准则同样适用于其他的编程语言。本书中的一些议题,... 查看全部[ 这本书只适用于Java ]
毫无疑问,肯定有不少人用正确的方式开发了很多API,否则现在的市场上就不会有这么多非常有用的软件产品。但设计原则、设计API的技巧及要点,通常都是在开发过程中下意识积累而得,而这一过程往往并不具有借鉴意义。很多设计师往往没有知其所以然就做一些API设计上的决策。结果就是在不停地尝试,犯错,再尝试再犯... 查看全部[ 学习编写API ]
决定要以何种风格来撰写本书无疑是一件非常困难的事情,我当时在两种完全不同的写作风格之间摇摆不定,无法定夺。一种写作风格是:用非常科学化、公式化的方式来说明API设计时的动机、原因及步骤。使用这种方式来撰写的话,书中给出的建议和规则具有通用性,可以应用于任何项目。当然,通用性是本书的一个目的,书中所说... 查看全部[ 这是一本备忘录吗 ]
软件开发的历史很短,从有人编写和执行第一个计算机程序至今,也不足百年。尽管历史并不悠久,但其影响力并不逊于其他任何一种开创性的发明。有人把计算机科学发展史与人类认识真实世界的历史放在一起加以比较,这非常有意思,我们也借此来理解为什么软件开发需要优秀的API。下面我们来试试这么做。... 查看全部[ *** ]
在文艺复兴时期,现代科学产生了两大重量级理论,表现在哲学方面则为理性主义和经验主义。其中理性主义认为理智是信息的首要来源,并给出一个假设:只需要通过思考就能够理解和描述这个真实的世界。理性主义的支持者包括现代科学的众多先驱,像法国哲学家、数学家勒内•笛卡儿(René Descartes,1596—1... 查看全部[ 1.1 理性主义,经验主义以及无绪① ]
在20世纪40年代和50年代初时,编写代码是一件非常困难的事。人们不得不学习机器语言,同时还要知道寄存器的大小和数量,有时候,事情不妙,还要拿起螺丝刀亲自上场①,去连接计算单元的信号线。人们的主要精力不在于思考一个算法,而放在将算法编写成可执行程序上,这是一种枯燥又机械的工作。 FORTRAN语言... 查看全部[ 1.2 软件的演变过程 ]
在21世纪的前10年中,大部分软件系统都可以用脏乱差来形容,没有哪个软件的设计配得上用优雅这个词。这主要是因为开发时,大家的目标就是用尽可能少的资源来尽快地开发完项目。为了达到这个目标,开发团队往往直接复用现有的一些软件框架,而完全不顾这些重量级的框架其实是远远超出他们的需要。 发布网页 最近,... 查看全部[ 1.3 大型软件 ]
我敢肯定本书的很多读者对于我美化无绪会愤愤不平。现在这样一种重量级的开发方式往往会把一个程序变成一堆垃圾,怎么能用这种开发方式取代以前那种优雅的软件开发呢?如此丑陋的应用怎么能够保证其正确性呢?其实答案是肯定的,我们只需要去仔细看一下我们大部分人现在所担心的事情。 科学理念仍然深植在我们心中,并始... 查看全部[ 1.4 漂亮,真理①和优雅 ]
我们已经看到,简单和优雅都不会作为评价软件部署成功的标准。就像哲学,理性主义过于学术化了,不能帮助我们去理解现实世界中的日常问题。而那种推土机式的务实工作方式,却让人感觉很有发展前途:把市场上可用的组件装配成应用程序,不管用了多少功能库,都把它们粘在一起,只要它能用,也不需要了解清楚个所以然出来。虽... 查看全部[ 1.5 更好的无绪 ]
设计API并不容易,且代价不菲。相比之下,试图创建一个带有API的产品比发布一个丝毫不包含任何API的产品工作量要大得多,而且后者更加容易。尽管如此,在“无绪”的原则下,我们认为,基于设计合理的API,你可以设计出更好的软件系统,同时无需深入地了解系统细节。在开发系统子模块时,良好的设计,加之使用系... 查看全部[ *** ]
无绪的模型需要利用全世界范围的软件项目中大的组件模块,以装配的方式来开发应用程序。要尽可能多地复用,而不要从零开始编写软件,这样就可以保证产品团队能将重点集中在软件的独特功能上,即应用程序的具体业务逻辑上。这样,开发人员就无需花费时间去创建和编写基础设施,重用现有的框架和由第三方提供的功能库即可。相... 查看全部[ 2.1 分布式开发 ]
模块化的应用程序是由分布式团队开发出来的独立组件组成的。这些独立的组件通常都会提供一个自己的API,当然在具体执行的时候,也需要第三方组件的API或者其他功能才能保证正确运行。例如,Tomcat服务器需要Java运行时实现。同样,标准的C++模板库也需要libc,这样才能调用printf方法。如果使... 查看全部[ 2.2 模块化应用程序 ]
到这里,我们理想的应用程序的轮廓应该很清楚了。应用程序应该基于无绪原则来开发,尽量让最终负责集成的相关人员不需要深入了解系统也可以把集成工作做好。所以,我们理想的应用程序应该基于模块化架构来开发,可以由散布在世界各地的独立开发团队分别负责编写相应的模块。他们可以按照自己的日程来安排工作,以达到最终的... 查看全部[ 2.3 交流互通才是一切 ]
很少有人能够以合理的方式来分析一个新API。没有人在学习使用一个API的时候,去尽力理解该API背后的设计思路。现实正是如此:现在的开发人员想的是在无需理解所有内容的情况下,尽快完成他们的工作,如果他们使用的API能够完成他们的工作,就不会花时间来深入思考这个API。 在本书第1章中提到的那些经验... 查看全部[ 2.4 经验主义编程方式 ]
如果你想说服其他程序员使用你设计的API,那么必须先取得他们的信任。你需要让这些程序员们相信,你有能力来设计、编写和维护一个稳定的API,而且能在后续的多个版本中坚持做到这一点。即使不考虑使用一个API有多困难,如果该API的新版本发布后,所有的客户端代码都需要重写,这简直就是厄运的开始。想一下,有... 查看全部[ 2.5 开发第一个版本通常比较容易 ]