软件健身操——九步迈向优秀软件设计
1. 方法只使用一次缩进
使得代码逻辑更加清晰,代码的可读性增强。越大的方法越缺少内聚性,通过编译器的抽取功能,可以对方法进行提炼,直到方法中只有一次缩进。
2. 不使用else关键字##
else语句会使得程序逻辑看起来更加复杂,形成更深层的逻辑关系,通常对于简单的else语句使用卫语句或提前返回来去掉else语句。
3. 封装所有的原生类型和字符串
整数,只代表一个数量,并没有实际的意义,我们需要对整数进行封装,使它变得更有意义,让代码通俗易懂。
4. 一行代码只有一个“.”运算符
如果一行代码中有多个“.”运算符,那就说明很多类的职责就搞混了,假设我们去电影院付钱,我们自己掏钱包给收银员钱即可,如果抽象成多个“.”的情况,就是收银员拿着我们的钱包去付钱,这明显不符合常理。封装的含义就是不要让当前类跨入它不知道的类型中。而像java中字符串处理的一些类,他们通常使用的是bulider模式,即每一次“.”运算都会返回自身,因此不存在其他类的参与,所以并不会违反此条规定。
5. 不要使用缩写
起名字时尽量使用全拼,提高代码的可读性,方便阅读
6. 保持实体对象简单清晰
超过50 行的类所做的事情通常都不止一个。这会导致他们难以理解和重用。这意味着每个类的长度不能超过 50 行。每个包所包含的文件不超过 10 个。
7. 任何类中的实例变量都不要超过两个##
将一个对象从拥有大量属性的状态,解构成分层次的,相互关联的多个对象,会直接产生一个更实用的对象模型。将一个复杂的大的对象,分解成多个简单的对象。可以将实例变量按照相关性分离在两个部分中;可以创建一个新的对象来封装两个已有的实例变量。
8. 使用一流的集合
集合的概念应该是一类实例的集合。比如,定时器对象的集合——包括所有的定时器。我一般是放在定时器类中,然后使用static 来表示集合。看了这个方法要改一下了。任何包含集合的类都不能再包含其他的成员变量。每个集合都被封装在自己的类中。集合其实是一种应用广泛的原生类型。
9. 不要使用任何Setter、Getter、Property
要从询问,改变成命令。Geter/Setter/Proerty会对对象的封装性找出破坏。在严格封装的边界背后,真正的动机是迫使程序员在完成编码后,一定要为这段代码的行为找到一个合适的位置,确保它在对象模型中的唯一性。这样可以减少重复性的差错,以及在添加新特性的时候,可以在一个更合适的位置引入变化。