1.4 KiB
1.4 KiB
Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)
软件实体包含:
- 项目或软件产品中按照一定的逻辑规则划分的模块
- 抽象和类
- 方法
我们应尽量通过扩展软件的实体行为来实现变化, 而不是通过修改已有的代码来完成变化
我们把价格定义为 int 类型并不是错误,在非金融类项目中对货币处理时,一般取2位精度,通常的设计方法是在运算过程中扩大100倍,在需要展示时再缩小100倍,减少精度带来的误差
开闭原则对扩展开放,对修改关闭,并不意味着不做任何修改,低层模块的变更,必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段
变化可以归纳为以下三种类型
- 逻辑变化
- 子模块变化
- 可见视图变化
开闭原则的重要性
- 对测试的影响
- 可以提高复用性
- 可以提高可维护性
- 面向对象的开发要求
如何使用
- 抽象约束
- 通过接口或抽象类约束扩展
- 参数类型, 引用对象尽量使用接口或抽象类, 而不是实现类
- 抽象层尽量保持稳定, 一旦确定即不允许修改
- 元数据 (metadata) 控制模块行为
- 制定项目章程
- 封装变化