why?
软件产品最初制造出来,是经过精心的设计,具有良好架构的。但是随着时间的发展、需求的变化,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。
how to?
- 当属性、方法或类存在任何的需要复用的意向时,归纳提炼它们。
- 不要低估小方法对代码整洁的作用。使用小方法能让你节省很多笔墨。
- 能让代码长度变短的提炼都应该去提炼,包括注释。
- 用多形代替switch()——即使这样做会使代码变长。
- 用封装控制可见度。
- 消除依赖。
- 简化构造方法——即使这样做会使代码变复杂。
- 封装或避免条件表达式。使用guard语句,避免使用
else
语句。 - 使用常量代替魔幻数字。
- 不确定时,偏向使用组合而不是继承。
- 不确定时,将计算操作移入到这些数据的所有者对象里,或将数据移动到执行计算操作的对象里(也就是迪米特法则(Law of Demeter))。
- 使用小对象,松耦合,避免大对象,高聚合。
- 不确定时,偏向使用递归而不是循环。
- 使用代理对象,模拟对象和辅助对象来隔离网络,数据库,文件和用户接口。
- 不确定时,尽量在model里添加代码,必要时才往controler添加代码。view里添加的都应该是便捷功能和简写方法,但不要局限于此。
- 偏向使用apply, each, mapcar,而不是loop.
- 尽量使用新技术。