开闭原则

开闭原则的英文定义如下:
Software entities like classes,modules,functions should be open for extension but closed for modifications
一个软件实体如类、模块和函数,应该对扩展开放,对修改关闭。
开闭原则是什么:
定义中的软件实体包括:项目或软件产品按照一定的逻辑规则画法的模块、抽象和类、方法
开闭原则对扩展开放,对修改关闭,并不意味着不做任何的修改。不做任何的修改是不可能的,低层次的模块发生变化,不管是修改还是扩展,高层次的模块由于有耦合,必然会进行或多或少的修改,否则低层次模块就是一个孤立无意义的代码块。
变化可以理解包含:逻辑变化、子模块变化、课件视图变化
为什么采用开闭原则:
1.考虑对测试的影响,采用开闭原则,那么进行了扩展不会影响原有的逻辑,在测试的时候只测试新增的代码即可,不用回归之前的,否则要将整个系统代码进行回归测试,极大地增加了测试成本。
2.开闭原则可以提高复用性:只有所有的逻辑都是原子逻辑组合来的,粒度才会更小,那么被复用的可能性才会更大。被复用,提高了开发效率,减少了代码量,修改的话只修改抽象出来的原子逻辑即可,不需要每个使用的地方都进行修改
3.提高维护性:维护人员只需要扩展类即可,而不需要修改类,减少了对原有代码完全得理解,提高维护效率。
4.面向对象开发的要求
如何使用开闭原则:
1.抽象约束
1)通过接口和抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法
2)参数类型、应用对象尽量使用接口或者抽象类,而不是实现类
3)抽象层尽量保持稳定,一旦确定尽量不要修改,可以使用接口或者抽象类继承的方式,来进行扩展
2.元数据(metadata)控制模块行为
什么是元数据,元数据就是描述环境和数据的数据,简单的说就是配置参数,配置参数可以从缓存、数据库、配置文件中读取。
3.指定开发章程
在项目整个过程中,每个人都必须遵守的,章程要优先于约束,比如规定spring bean都是用注解,而不是使用配置文件
4.封装变化
封装变化包含两层含义:1.将相同的变化封装到一个接口或者抽象类中。2.将不同的变化封装到不同的接口或者抽象类中。

你可能感兴趣的:(开闭原则)