对象健身操九式

优秀设计背后的七条核心概念

内聚性,松耦合,零重复,封装,可测试性,可读性,单一职责。

采用这些规则的关键在于:只要使用Java语言,就应该使用面向对象的思考。

规则1:方法只使用一级缩进

动机:庞大的方法往往缺少内聚性,一个常见的原则是将方法控制着5行以内(不包括入参检查)。你可以尝试让每个方法只做一件事情——每个方法只保护一个控制结构或一个代码块。

方法:利用IDE的抽取方法的功能,不断的抽取方法中的行为,直到一个方法只有一级缩进位置。

“运用这些规则的技能是一种艺术,它能将程序员提升到一个新的高度。”

规则2:拒绝else关键字

动机:复杂的条件判决难于理解,而且易产生重复代码。

方法:对于简单判断可以使用卫语句和提前返回,对于复杂的条件判断则可以使用多态。另外也可以使用策略模式。

规则3:封装所有的原生类型和字符串

动机:整数只是代表一个数量,没有实际的含义。用类来表示原生类型,比如年,月,日等。这样可以进行严格的类型检查。

规则4:一行代码只有一个“.”(或者“->”)运算符

动机:如果一行中含有多个“.”,则说明很多职责的位置放置错了。尝试让对象为你做一些事情,而不要窥视对象内部的细节。封装的含义就是,不要让类的边界跨入到它不应该知道的类型中。

规则5:不要使用缩写

动机:缩写的原因:1)一遍一遍的敲打同样的单词,则可能是因为某个方法调用过于频繁——要消除一下重复。2)方法名字太长——可能是职责没有放在应该在的位置或者有确实的类。

方法:所有实体对象的名称都只能包含一到两个单词,不要使用缩写。

规则6:保持对象实体简单清晰

动机:超过50行的类所做的事情通常都不止一个。这会导致他们难以理解和重用。这意味着每个类的长度不能超过50行。每个包所包含的文件不超过10个。

规则7:任何人类中的实例变量不要超过两个

动机:将一个对象从拥有大量属性的状态,解构成分层次的,相互关联的多个对象,会直接产生一个更实用的对象模型。将一个复杂的大的对象,分解成多个简单的对象。

方法:可以将实例变量按照相关性分离在两个部分中;可以创建一个新的对象来封装两个已有的实例变量。

规则8:使用一流的集合

集合的概念应该是一类实例的集合。比如,定时器对象的集合——包括所有的定时器。我一般是放在定时器类中,然后使用static来表示集合。看了这个方法要改一下了。

任何包含集合的类都不能再包含其他的成员变量。每个集合都被封装在自己的类中。集合其实是一种应用广泛的原生类型。

规则9:不要使用任何的Geter/Setter/Proerty

Geter/Setter/Proerty会对对象的封装性找出破坏。

在严格封装的边界背后,真正的动机是迫使程序员在完成编码后,一定要为这段代码的行为找到一个合适的位置,确保它在对象模型中的唯一性。

这样可以减少重复性的差错,以及在添加新特性的时候,可以在一个更合适的位置引入变化。

这九条原则可以作为对面向对象优秀设计的训练(可以通过一个小的项目),但是,在实际的过程中不可以教条的应用上面的原则。引用P.J. Plauger的话:

“你在应用某种设计方法的时候越教条化,你所能解决的现实问题就会越少。请把设计看出是一个险恶的,杂乱的和启发式的过程(没有教条化的规则可以遵循,能够巧好解决现实问题的方案才是最佳的方案)。不要停留于你所想到的第一套方案,而是去寻求合作,探求简洁性,在需要的时候做出原型,迭代,并进一步迭代。你将对你的设计成果感到满意。”

你可能感兴趣的:(对象健身操九式)