Files
Hui-s-notebook/开闭原则.md
2023-09-10 10:50:53 +08:00

1.4 KiB
Raw Blame History

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)

软件实体包含:

  • 项目或软件产品中按照一定的逻辑规则划分的模块
  • 抽象和类
  • 方法

我们应尽量通过扩展软件的实体行为来实现变化, 而不是通过修改已有的代码来完成变化

我们把价格定义为 int 类型并不是错误在非金融类项目中对货币处理时一般取2位精度通常的设计方法是在运算过程中扩大100倍在需要展示时再缩小100倍减少精度带来的误差

开闭原则对扩展开放,对修改关闭,并不意味着不做任何修改,低层模块的变更,必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段

变化可以归纳为以下三种类型

  • 逻辑变化
  • 子模块变化
  • 可见视图变化

开闭原则的重要性

  1. 对测试的影响
  2. 可以提高复用性
  3. 可以提高可维护性
  4. 面向对象的开发要求

如何使用

  1. 抽象约束
    1. 通过接口或抽象类约束扩展
    2. 参数类型, 引用对象尽量使用接口或抽象类, 而不是实现类
    3. 抽象层尽量保持稳定, 一旦确定即不允许修改
  2. 元数据 (metadata) 控制模块行为
  3. 制定项目章程
  4. 封装变化