《程序员修炼之道》第二章——A Pragmatic Approach

来源:互联网 发布:图灵出版社 java 编辑:程序博客网 时间:2024/06/08 09:43

注重实效的途径

重复的危害

程序员须持续不断地维护。不管原因是什么,维护都不是时有时无的活动,而是整个开发过程中的例行事务
当我们进行维护时,我们必须要找到并改变事物的表示
系统中的每一项知识都必须具有单一、无歧义、权威的表示

DRY--Don't Repeat Yourself

啊,同学把我的书借走了。。。最近这本书就这样吧。。。。啊 无敌了。。。


10月12日。
书回来了。。。继续吧。。。

重复的发生:

  • 强加的重复
  • 无意地重复
  • 无耐性的重复
  • 开发者之间的重复
Make It Easy to Reuse

要把低级的知识放在代码中,它属于那里;把主食保留给其他的高级说明。
否则,我们就是在重复知识,而每一次改变都意味着要改变代码,也要改变注释。注释将不可避免得过时,而不可信任的注释比完全没有注释更糟

你可以因为性能原因而选择违反DRY原则。这经常会放生在你需要缓存数据,以避免重复昂贵的操作时。其诀窍是使影响局部化。对DRY原则的违反没有暴露给外界:只是类中的方法需要注意“保持行为良好”

你所要做的是营造一种环境,在其中要找到并复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用。而如果不进行复用,你们就会有重复知识的风险。

正交性:

重要性:

一旦你学会了直接应用正交性原则,你将发现,你制作的系统的质量立刻就得到了提高。

定义:

该术语用于表示某种不相依赖性或是解耦性。如果两个或更多事物中的一个发生变化,不会影响其他事物,这些事物就是正交的。

正交的好处

非正交系统的改变与控制更复杂是其固有的性质。当任何系统的各组件互相高度依赖时,就不再有局部修正这样的事情。

Eliminate Effects Between Unrelated Things

两个最主要的好处

提高生产率与降低风险

提高生产率

  • 改变得以局部化
  • 正交的途径还能够促进服用
  • 如果对正交的组件进行组合,生产率会相当微妙的提高——一个组件能做m件事情,另一个能做n件事情。然后俩一组成就变成了m*n——emmmm还他妈是玄学

降低风险

  • 正交的途径能降低任何开发中固有的风险
  • 有问题的代码区域被隔离开来
  • 所得系统更健壮
  • 正交系统很可能能得到更好的测试
  • 你不会与特定的供应商、产品、或是平台紧绑在一起,因为与这些第三方组件的接口将被隔离在全部开发的较小部分中

设计

系统应该由一组相互协作的模块组成,每个模块都实现不依赖于其他模块的功能。又是,这些组件被组织为多个层次,每层提供一级对象。这种分层的途径是设计正交系统的强大方式。

不要依赖你无法控制的事物属性

工具箱与库

在引入某个工具箱时(甚或是来自你们团队其他成员的库),问问你自己,他是否会迫使你对代码进行不必要的改动。如果对象持久模型是透明的,那么他就是正交的。如果它要求你以一种特殊的方式创建或访问对象,那么他就不是正交的。

例子:

ejb系统:
在ejb中,描述每个事物的开始与结束时作为元数据,在任何代码之外以生命的方式表示的。同一应用代码不用修改,就可以运行在不同的EJB事物环境中。
另一个方面是AOP

编码

  • 让你的代码保持解耦
    编写“羞怯”的代码——也就是不会没有必要地向其他模块暴露任何事情、也不依赖其他模块的实现的模块
  • 避免使用全局数据
  • 避免编写相似的函数
    养成不断地批判自己的代码的习惯。寻找任何重新进行组织、加以改善其结构和正交性的机会

可撤销性:

本人觉得这个可撤销性有点难以实现,——各位大佬有什么其他想法吗?我还没接触到可撤销的这种特性。。。

原创粉丝点击