第二章:注重实效的途径
生活在一个时间与资源有限的世界。
七、重复的危害
知识变化,对需求的理解与客户会谈发生变化,政策更改--维护上更花时间。
维护:整个开发工程的例行事务。--程序员要持续不断地维护因为理解逐日变化。
DRY原则:Don’t Repeat Yourlf :系统的每个知识必须具有单一、无歧义、权威的表示。
使开发变得易于理解和维护唯一途径(作者称我们):遵循DRY。
两种或更多地方表达同一事物:改变一处,改变其他处。
重复发生:强加,无意,无耐性(开发者偷懒),开发者之间。
强加的重复:信息的多种表示,发挥自己的才智,代码中的注释要可信,先撰写文档再编写代码(一般情况下),语言带来的问题:多思考。
无意的重复:可能来自设计的错误,多个相互依赖的书数据元素中出现不规范数据,因性能原因违法DRY原则--使影响局部化。
无耐性重复:时间的压力--驱使最优秀的人走捷径的力量。(欲速则不达)
开发者之间的重复:阅读他人的源码与文档,不管是非正式的还是进行代码复查。
让复用变得容易:营造一种环境,在其中找到并复用已有的东西,比自己编写更容易。不进行复用,会有重复知识的风险。
八、正交性
正交性:计算技术中,表示某种不想依赖性或是解耦性。如果两个或更多事物中的一个发生变化,不会影响其他事物。数据库代码与用户界面正交:更换数据库,而不用改动界面,反之亦然。
好处:消除无关事物之间的影响。
非正交系统:改变与控制更为复杂。
任何系统的各组件互相高度依赖时,将不会有局部修正(local fix)的事情。
正交的系统:提高生产率与降低风险。
生产率:1、改动局部化,使得开发时间与测试时间降低。
2、正交的途径能够促进复用。
3、对正交的组件进行组合,生产率会有相当微妙的提高:一个组件做M件事情,另一个N件,如果两者正交,组合在一起便能做M乘N件。
降低风险:1、正交能降低任何开发中的固有风险。
2、有问题的代码区域被隔离。
3、所得系统更健壮。
4、正交系统很可能得到更好的测试,因为设计测试、并针对七组件运行测试更容易。
5、不与特定供应商、产品或是平台紧绑在一起,因为与这些第三方组件的接口被隔离在全部开发的较小部分。
项目团队:正交的团队效率更高,但也仍要鼓励团队不断相互交流。
设计:分层,提供一级抽象。如果显著地改变某个特定功能背后的需求,在正交系统中,应该只有一个模块受到影响。不要依赖无法控制的事物属性。
工具箱与库:引入第三方工具箱和库时,注意保持系统的正交性。正交性的另一个变体时面向方面编程。
编码:1、保持解耦:不会没有必要地向其他模块暴露任何事情、也不依赖其他模块的实现的模块。
2、避免使用全局数据:可能带来麻烦。一般,把所需的任何语境(context)显式的传入模块,代码将更易于理解和维护。面向对象应用中,可创建含有语境的结构,并传递指向这些结构的引用。
3、避免编写相似的函数。
养成不断批判对待自己的代码的习惯。
重构(refactoring):寻找任何重新进行组织、以改善其结构和正交性的机会。
测试:
正交地设计和实现的系统更易于测试,因为系统的各组件的交互式形式化的和有限的,更多的系统测试可以在单个的模块级进行。建议每个模块都拥有自己的、内建在代码中的单元测试,并让这些测试作为常规构建过程的一部分自动运行。
构建单元测试:是否必须把系统其余的很大一部分拽进来:发现没有很好地解除与系统其余部分耦合的模块。
修正bug。
是否只改动一个模块,或者改动分散在整个系统的各个地方:做出改动时,是修正了还是出现其他问题--开始运用自动化的好机会。
文档:坐标轴是内容和表现形式。对于真正正交的文档,你应该能显著地改变外观,而不用改变内容。
认同正交性:
其与DRY原则紧密相关
运用DRY原则:寻求系统中的重复降至最小。
运用正交性原则:降低系统的各组件间的相互依赖。
开发的系统将更为灵活、易于理解、调试、测试和维护。
九、可撤销性
可撤销性:
遵循相关的建议--特别是DRY原则、解耦以及元数据的使用---不必做出许多关键、不可逆转的决策。
我们并非总能在一开始做出最好的决策--采用某种技术,找不到足够具有必要技能的人或与开发软件速度相比,需求、用户及硬件变得更快......
错误在意假定决策是浇筑在石头上的--同时还在于没有为可能出现的意外时间做准备。
要把决策视为写在沙滩上的-----大浪随时可能到来,将它们抹去。
不存在最终决策。
灵活的架构:
保持代码灵活性,还要考虑维持架构、部署及供应商集成等领域的灵活性。
预先考虑:不确定市场部门想怎样部署系统--单机、客户-服务器或n层模型--只需改变配置文件。
通常,将第三方产品隐藏在定义良好的抽象接口后面。无论用何种机制,让它可撤销。
让代码学会“摇滚”:可“摇”就“摇”,必须“滚”就“滚”。
标签:DRY,--,小工,系统,正交,程序员,修炼,模块,代码 From: https://www.cnblogs.com/uninan/p/16747818.html