第二章: 注重实效的途径
tip7:重复的危害--简称DRY原则(don’t repeat yourself),系统中的每一项必须具有单一的、无歧义、权威的表示,系统里面所谓的重复就是在两个或者多个地方改变了同一事物,一旦修改了其中一处,就必须要修改另外一处,一旦我们忘记修改了,重复的问题就显示出来了。 dry原则是程序员的最重要工具之一。
重复可以分为以下4种:
1.强加的重复(impose duplication):开发者觉得他们别无选择---环境似乎要求要重复,在以下三种地方可能会出现这种情况:
a.信息的多种表示,我们需要用不同的形式表示同一信息,例如客户端和服务端都具有相同的结构,在这种情况下我们应该利用同一份元数据自动生成结构,这样信息就不会重复了。
b.代码中的文档,即注释,糟糕的代码才需要许多注释,把注释放在高级说明里面。
c.文档与代码,文档和代码有一份数据的表示,
2.无意的重复(inadvertent duplication):开发者没有意识到他们正在重复信息,有时候,这种重复来自于设计中的错误,例如以下这个关于一个路线的数据结构定义:
public class Line {
private Point start;
private Point end;
private double length;
}
这个数据结构中的长度应该是由起始点和终点决定的,只要我们改变了其中一个点,长度信息我们也要手动更改,所以此时我们应该将长度封装在一个方法里面,
public class Line {
private Point start;
private Point end;
public double getLength() {
return start.distanceTo(end);
}
}
3.无耐性的重复(impatient duplication):开发者偷懒,因为这样会更容易些。有时候这种重复是迫于时间的压力,单纯的copy代码显得更加的快,但是这是不可取的。
4.开发者之间的重复(inter developer duplication) :两个开发者无意间的重复
对于避免重复,我们更是为了能够让复用更加的容易,比自己编写更加容易。
tip8:正交性--在计算机中,正交性表示了某种不相互依赖性或者解耦性。如果一个系统是非正交的,那么进行局部修复那就是不可能的了。所以,我们应该消除无关事物之间的影响。正交有许多好处,最直接的就是提高生产率和降低风险。提高生产率:你做的东西和别人的互不冲突,互不干扰,不会被别人所阻塞。
降低风险,你所写的东西与系统的其它部分是解耦的,一旦有错误,只会影响到自身的模块。
对于维持所写代码的正交性,我们可以用以下的技术:
1.让我们的代码保持解耦,即没有必要向其它模块暴露任何事情,也不依赖于其它模块的具体实现。
2.避免使用全局数据
3.避免编写相似的函数,重复的代码结构也是一种症状,可以参照设计模式的策略模式
tip9:可撤销性--我们要制作灵活的,有适应能力的软件,要为可能出现的意外做准备,维持代码的灵活性,同时也要维持架构的灵活性。
tip10:曳光弹--注重实效的程序员往往更喜欢曳光弹,找到某种东西,让我们能快速的,更加直观的可重复的从需求出发,满足最终系统的某个方面需求。曳光代码并非用过就扔的代码,它有着许多优点
1.用户能够及早看到能工作的东西
2.开发者构建了一个他们能在其中工作的结构
3.你有了一个集成平台
4.你将更能感觉到工作进展
tip11:原型和便签--原型的目的就是回答一些问题,其代码可以忽略一些不重要的细节。以下的细节是构建原型可以忽略的,正确性、完整性、健壮性和风格。
tip12:领域语言--讲述了每个语言有自身的特性,不同的语言将影响我们的思考方式。
tip13:估算--以避免发生意外,估算可以分为下面的步骤:
1.理解提问内容
2.建立系统的模型
3.把模型分为组件
4.给每个参数指定值
5.计算答案
6.追踪估算能力
7.估算项目进度