注重实效的途径
重复的危害
程序员须持续不断地维护。不管原因是什么,维护都不是时有时无的活动,而是整个开发过程中的例行事务
当我们进行维护时,我们必须要找到并改变事物的表示
系统中的每一项知识都必须具有单一、无歧义、权威的表示
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
编码
- 让你的代码保持解耦
编写“羞怯”的代码——也就是不会没有必要地向其他模块暴露任何事情、也不依赖其他模块的实现的模块 - 避免使用全局数据
- 避免编写相似的函数
养成不断地批判自己的代码的习惯。寻找任何重新进行组织、加以改善其结构和正交性的机会
可撤销性:
本人觉得这个可撤销性有点难以实现,——各位大佬有什么其他想法吗?我还没接触到可撤销的这种特性。。。