架构整洁之道-05 设计原则-开闭原则OCP

简介: 开闭原则 Open Closed Principie ,OCP软件实体的行为应当不是修改实体,而是对实体进行扩展。

开闭原则

由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。

开闭原则 Open Closed Principie ,OCP

软件实体的行为应当不是修改实体,而是对实体进行扩展。

比如,有一个财务报表系统,已实现了财务数据的滚动,且负数显示红色的。但工作人员需要打印此报表数据,且需要对报表数据有其他格式要求。如果要满足这样的需求,需要考虑下,是否需要写新代码,老代码需要变更多少呢?

通过单一原则SRP进行实现,把计算财务数据,数据显示,打印数据的划分到不同职责中。通过分离后,还需要确认源码的依赖关系,确保变化之后不会影响到其他的组件,然后新功能的实现可以通过OCP原则,不进行修改而是通过扩展设计来完成实现。

实现方法

通过 “抽象约束、封装变化” 来实现开闭原则。使用抽象类或接口为实体定义一个稳定的抽象层,而可变的因素都封装在具体的实现类中。

所以,当软件发生变化时,只需要根据需求重新派生出一个实现类来扩展,严格遵守开闭原则。

abstract class Subject {
  display():void {}
} 
​
class Subject1 {
  display() {
    console.log('具体类1实现。。。')
  }
}
​
class Subject12{
  display() {
    console.log('具体类2实现。。。')
  }
}

开闭原则优点

  • 对软件测试的影响:OCP原则是扩展设计,所以原有功能保持不变,那么软件测试时可以只测试扩展的部分
  • 提高代码的可复用性:粒度越小,被复用的可能性越大
  • 提供软件的可维护性:开闭原则使得软件的稳定性和延续性更高,这样就更易扩展和维护

开闭原则缺点

  • 实现类多的话,容易导致需要过多维护不同具体类
  • 容易导致衍生过度设计

场景介绍

比较熟悉的场景就是:插件和中间件。设计者将插件和中间件的扩展能力开发给使用者就必须遵守开闭原则。

所以,开闭原则的目标是让系统不发生重大的修改而易于扩展。这个目标是通过分割系统成各个组件,规划组件的依赖层级关系,保护高层级避免受低层级组件影响实现的。

参考资料:

目录
相关文章
|
3月前
|
前端开发 Java 测试技术
使用整洁架构优化你的 Gradle Module
使用整洁架构优化你的 Gradle Module
63 0
|
10月前
|
存储 Go 数据处理
Go 语言整洁架构实践
Go 语言整洁架构实践
72 0
|
6天前
|
消息中间件 监控 API
深入浅出微服务架构设计原则
在软件开发的宇宙中,微服务如星辰般璀璨,引领着分布式系统的航向。本文将带你穿梭于微服务的星系,探索其背后的设计哲学与实践精髓,从服务边界的划分到数据一致性的保障,再到服务的通信与协作,我们将一同揭开微服务架构高效、可扩展且灵活的秘密。
15 4
|
7天前
|
消息中间件 设计模式 API
后端开发中的微服务架构设计原则
【8月更文挑战第13天】在软件工程的世界中,微服务架构已经成为一种流行的设计模式,它通过将复杂的应用程序分解成一组小的服务来简化开发和部署。本文探讨了微服务背后的设计理念,以及如何在后端开发实践中应用这些原则来构建可扩展、灵活且易于维护的系统。我们将深入讨论服务的划分、通信协议的选择、数据一致性的保障以及容错性策略的实施,旨在为后端开发人员提供一套实用的微服务架构设计指导。
18 1
|
3月前
|
数据中心 网络架构 Python
【计算巢】数据中心的网络架构设计原则
【5月更文挑战第31天】探讨数据中心网络架构设计原则:稳定性是基础,需抵御各种挑战;强调扩展性,适应业务发展;追求高效,确保数据传输速度;注重灵活性,灵活应对变化。简单Python代码示例展示网络节点连接。设计时需具备长远眼光,综合考虑技术方案,以构建坚固高效的信息桥梁。同学们,要持续学习和探索,为信息世界贡献力量!
50 2
|
3月前
|
监控 安全 API
微服务架构下的API网关设计原则
【5月更文挑战第31天】在本文中,我们将深入探讨微服务架构下API网关的设计原则。API网关作为微服务架构的入口点,其设计至关重要。我们将从性能、安全性、可扩展性等方面进行分析,并提出一些实用的设计建议。
|
3月前
|
存储 缓存 运维
云计算架构设计原则
【4月更文挑战第6天】这篇文章介绍了基于云计算的架构设计六大原则:合理部署、业务持续、弹性扩展、性能效率、安全合规和持续运营。
|
12月前
|
设计模式 关系型数据库 数据安全/隐私保护
软件架构设计原则之单一职责原则
单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因。假设我们有一个类负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能导致另一个职责的功能发生故障。这样一来,这个类就存在两个导致类变更的原因。如何解决这个问题呢?将两个职责用两个类来实现,进行解耦。后期需求变更维护互不影响。这样的设计,可以降低类的复杂度,提高类的可读性,提高系统的可维护性,降低变更引起的风险。总体来说,就是一个类、接口或方法只负责一项职责。
92 0
软件架构设计原则之单一职责原则
|
12月前
|
设计模式 人工智能 Java
软件架构设计原则之依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。接下来看一个案例,还是以Course(课程)为例,先来创建一个类Tom:
75 0
|
3月前
|
存储 关系型数据库 uml
00003.七大软件架构设计原则
00003.七大软件架构设计原则
56 0