架构整洁之道-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原则是扩展设计,所以原有功能保持不变,那么软件测试时可以只测试扩展的部分
  • 提高代码的可复用性:粒度越小,被复用的可能性越大
  • 提供软件的可维护性:开闭原则使得软件的稳定性和延续性更高,这样就更易扩展和维护

开闭原则缺点

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

场景介绍

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

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

参考资料:

目录
相关文章
|
7月前
|
前端开发 Java 测试技术
使用整洁架构优化你的 Gradle Module
使用整洁架构优化你的 Gradle Module
75 0
|
存储 Go 数据处理
Go 语言整洁架构实践
Go 语言整洁架构实践
113 0
|
1月前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
29天前
|
监控 持续交付 API
深入理解微服务架构:从设计原则到实践应用
深入理解微服务架构:从设计原则到实践应用
|
29天前
|
运维 监控 安全
深入理解微服务架构:设计原则、挑战与实践
深入理解微服务架构:设计原则、挑战与实践
|
2月前
|
运维 Cloud Native 持续交付
云原生架构下的微服务设计原则与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境中微服务设计的几大核心原则,包括服务的细粒度划分、无状态性、独立部署、自动化管理及容错机制。通过分析这些原则背后的技术逻辑与业务价值,结合具体案例,展示了如何在现代云平台上实现高效、灵活且可扩展的微服务架构,以应对快速变化的市场需求和技术挑战。 ####
52 7
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
3月前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构设计原则与实践
【9月更文挑战第27天】本文深入探讨了在云原生环境下,如何高效地实施微服务架构。通过分析微服务的基本概念、设计原则和关键技术,结合实际案例,指导读者理解并应用微服务架构于云计算项目之中。文章旨在为软件开发者和架构师提供一条清晰的路径,以实现更加灵活、可扩展且易于维护的系统。
|
2月前
|
Cloud Native 持续交付 数据安全/隐私保护
云原生时代的微服务架构设计原则
在数字化浪潮中,企业纷纷上云以获得更大的灵活性和扩展性。云原生技术因此成为现代软件开发的核心。本文将深入探讨在云原生环境下如何设计高效、可靠的微服务架构,涵盖关键设计原则、最佳实践以及面临的挑战。我们将通过实际案例分析,揭示如何在云原生生态中构建和维护微服务,确保系统的稳定性和可维护性。
|
4月前
|
分布式计算 负载均衡 API
微服务架构设计原则与模式
【8月更文第29天】随着云计算和分布式计算的发展,微服务架构已成为构建大型复杂应用的一种流行方式。这种架构模式将单个应用程序分解成一组小型、独立的服务,每个服务运行在其自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。本文将探讨微服务架构的基本设计原则、常用模式以及如何有效地划分服务边界。
443 3