0%

6.4 如何使用开闭原则

6.4 如何使用开闭原则

开闭原则是一个非常虚的原则,前面5个原则是对开闭原则的具体解释。

如何把开闭原则应用到实例工作中

1. 抽象约束

抽象是对一组事物的通用描述,没有具体的实现,也就表示它可以有非常多的可能性,可以跟随需求的变化而变化。因此,通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放,其包含三层含义:

  • 第一,通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;
  • 第二,参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;
  • 第三,抽象层尽量保持稳定,一旦确定即不允许修改。

要实现对扩展开放,首要的前提条件就是抽象约束。

2. 元数据(metadata)控制模块行为

什么是元数据

元数据是用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从配置文件中获得,也可以从数据库中获得。
元数据使用达到极致的就是控制反转(Inversion of Control),使用最多的就是Spring容器。

3. 制定项目章程

在一个团队中,建立项目章程是非常重要的,因为章程中指定了所有人员都必须遵守的约定,对项目来说,约定优于配置
相信大家都做过项目,会发现一个项目会产生非常多的配置文件。举个简单的例子,以SSH项目开发为例,一个项目中的Bean配置文件就非常多,管理非常麻烦。如果需要扩展,就需要增加子类,并修改SpringContext文件。
然而,如果你在项目中指定这样一个章程:所有的Bean都自动注入,使用Annotation进行装配,进行扩展时,甚至只用写一个子类,然后由持久层生成对象,其他的都不需要修改。这就需要项目内约束,每个项目成员都必须遵守,该方法需要一个团队有较高的自觉性,需要一个较长时间的磨合,一旦项目成员都熟悉这样的规则,比通过接口或抽象类进行约束效率更高,而且扩展性一点也没有减少。

4. 封装变化

对变化的封装包含两层含义:

  • 第一,将相同的变化封装到一个接口或抽象类中;
  • 第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。

原文链接: 6.4 如何使用开闭原则