软件实体的定义:项目中分离出来的模块、类与接口、方法
开闭原则 (OCP):
关键词:对扩展开放,对修改关闭
背景:
需求的变化是必然的,当需求变化时,我们该怎样去实现新的需求呢?可选方案通常有两种:1、修改原有代码。2、拓展原有代码。两个方法都可以实现,但是哪个方法更好呢,显然第二个,原因如下:
- 提高效率:修改原有代码,需要对原有逻辑有非常深的了解,这需要花费大量的时间。
- 便于测试:修改原有代码,会带来诸多不确定性的影响因素,对原有功能影响的范围不可把控,就需要回归测试,增加工作量,成本极高。而在原有基础上进行拓展的话,就无需做大范围回归测试,影响范围可控。
定义:
软件实体应当对扩展开放,对修改关闭。当应对需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
作用:
开闭原则是面向对象设计的终极目标,使软件实体拥有一定的适用性和灵活性的同时具备稳定性和延续性。
- 对测试的影响比较小(只需要对扩展部分测试)
- 可以提高代码的可复用性(变动越小,可复用性越高)
- 可以提高软件的可维护性
最佳实践:
可以通过“抽象约束,封装变化”来实现开闭原则,即通过接口或抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。