【设计原则篇】聊聊开闭原则

开闭原则 其实就是对修改关闭,对拓展开放。

是什么
OCP(Open/Closed Principle)- 开闭原则。关于开发封闭原则,其核心的思想是:模块是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

如何设计开发原则
在实际的业务开发中,我们会经常遇到各种不同的业务需求等,比如在互联网金融中针对不同的用户进行拒贷、不同的策略等,我们需要进行权衡业务进行去进行设计拓展点,大多数的时候基于拓展点都是针对接口、抽象、多态以及设计模式(策略、模板、责任链、状态等)进行实现的。比如说需要使用消息队列进行发送数据,那么我们可以抽象出一个更高纬度消息队列接口,如果当前使用的是rabblitmq,那么如果切换到kafka中就可以直接实现一套kafka的就可以。
在这里插入图片描述

如何在实际开发中应用开闭原则
在实际的工作中使用,业务开发和基础架构开发,两种模式来说的话,其实需要考虑的点不同,业务开发更多的是根据业务短期内需求的变更进行实现需求,而基础架构的话,是需要找到不变的点,然后将其记性抽取出更加通用的基础类库。
但是在实际的开发中,我们需要权衡利弊,也就是为了更好的拓展点,舍弃过度设计,以及在可读性和可拓展上进行取舍。有的地方可以进行为了可拓展性,那么放弃可读性。有的地方为了可读需要放弃拓展性。
总之没有一个放之四海而皆准的方案,需要我们结合具体的场景进行考虑。

总结
任何编码技巧也不如时刻具备拓展意识、抽象意识、封装意识。设计模式、设计原则等都是为了设计出可拓展的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学开发语言 求职互联网行业的未来发展

我喜欢回答各种各样的问题,自然也喜欢记录下自己的一些观点和看法。希望给朋友们多一点参考,也欢迎交流探讨。 提问: 自考本科,学的开发语言,问互联网行业求职和发展! 作为一个资深码农,对这样…

php 插入排序算法实现

插入排序是一种简单直观的排序算法,它的基本思想是将一个数据序列分为有序区和无序区,每次从无序区选择一个元素插入到有序区的合适位置,直到整个序列有序为止 5, 3, 8, 2, 0, 1 HP中可以使用以下代码实现插入排序算法: functi…

import gradio时出现SyntaxError: future feature annotations is not defined解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Word 插入的 Visio 图片显示为{EMBED Visio.Drawing.11} 解决方案

World中,如果我们插入了Visio图还用了Endnote, 就可能出现:{EMBED Visio.Drawing.11}问题 解决方案: 1.在相应的文字上右击,在出现的快捷菜单中单击“切换域代码”,一个一个的修复。 2.在菜单工具–>…

Elasticsearch--Python使用、Django/Flask集成

一、Python使用 from elasticsearch import Elasticsearchobj Elasticsearch() # 创建索引(Index) result obj.indices.create(indexuser, body{"userid":1,username:lqz},ignore400) # print(result) # 删除索引 # result obj.indices.de…

数据结构 | 图

最小生成树算法 Prime算法 算法思路:从已选顶点所关联的未选边中找出权重最小的边,并且生成树不存在环。 其中,已选顶点是构成最小生成树的结点,未选边是不属于生成树中的边。 例子: 第一步: 假设我们从顶…

C语言实现排序介绍

C语言学习都会学到排序算法&#xff0c;下面实现两个排序算法&#xff1a; #include <stdio.h>// 冒泡排序 void bubble_sort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j 0; j < n - i - 1; j) {if (arr[j] > arr[j 1]) {int temp arr[j…

从0到0.01入门 Webpack| 002.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

使用VSCode进行Python模块调试

使用VSCode进行Python模块调试 创建测试文件 创建文件test/a/b.py&#xff0c;且当前工作路径为test/ b.py文件内容&#xff1a; def cal(numa, numb):print(int(numa) int(numb))if __name__ "__main__":import sys# 判断系统参数长度是否为4且判断第2个参数是…

Sentinel底层原理(下)

1、概述 Sentinel的核心原理&#xff0c;也就是前面提到暗流涌动的SphU.entry(…)这行代码背后的逻辑。 Sentinel会为每个资源创建一个处理链条&#xff0c;就是一个责任链&#xff0c;第一次访问这个资源的时候创建&#xff0c;之后就一直复用&#xff0c;所以这个处理链条每…

打造全身视角的医院可视化能源监测管理平台,实现医院能源可视化管理

医院是大型公共建筑的一种&#xff0c;随着医院规模的不断扩大&#xff0c;医院能源消耗剧增&#xff0c;能源消耗居高不下。医院对于能源监管的需求也越来越高。医院建立一套能耗监测管理平台&#xff0c;对于降低医院能耗有着非常重要的作用。 医院能耗存在的问题 1、医院能…

Angular 模块介绍及使用(二)

Angular 模块概念 Angular 模块是一个重要的概念。模块提供了一种组织和封装组件、指令、管道和服务的方式&#xff0c;以及在应用程序中定义和配置这些功能。 下面是一些常见的 Angular 模块概念的介绍&#xff1a; 根模块&#xff1a;根模块是 Angular 应用程序的入口模块…

科研学习|科研软件——有序多分类Logistic回归的SPSS教程!

一、问题与数据 研究者想调查人们对“本国税收过高”的赞同程度&#xff1a;Strongly Disagree——非常不同意&#xff0c;用“0”表示&#xff1b;Disagree——不同意&#xff0c;用“1”表示&#xff1b;Agree--同意&#xff0c;用“2”表示&#xff1b;Strongly Agree--非常…

快速掌握华为VRP系统的CLI管理技巧,让你轻松玩转命令行!

华为VRP基础 基本概述 VRP(通用路由平台) 系统软件&#xff1a;.cc 配置文件&#xff1a;.cfg,.zip,.dat 补丁文件&#xff1a;.pat paf文件&#xff1a;.bin 设备初始化&#xff1a; 设备管理方式&#xff1a; WEB网管&#xff1a;配置与设备同网段IP地址&#xff0c;使用浏览…

【React】Redux基本使用

什么情况使用 Redux &#xff1f; Redux 适用于多交互、多数据源的场景。简单理解就是复杂 从组件角度去考虑的话&#xff0c;当我们有以下的应用场景时&#xff0c;我们可以尝试采用 Redux 来实现 某个组件的状态需要共享时 一个组件需要改变其他组件的状态时 一个组件需要…

jupyter lab常用插件集合

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

bazel build使用【未完】

1. install install的作用&#xff1a;将生成的目标、文件复制到指定的安装目录中&#xff0c;可以是可执行文件、库文件、 配置文件等 若有一个c可执行文件&#xff0c;可以使用install将其安装到标准的可执行路径中&#xff0c;以便于直接运行&#xff0c;而无需指定完整的文…

不使用宝塔面板 安装 EasyImage 简单图床

发布于 2023-07-17 在 https://chenhaotian.top/linux-app/easy-image/ 前言 如果不希望安装宝塔面板或其国际版 aapanel&#xff08;尽管宝塔面板可以在安装后关闭&#xff09;&#xff0c;那么可以参考这篇文章。 本文安装环境为 Debian 11, 在 Ubuntu 20.04 测试通过 安…

3D Gaussian Splatting文件的压缩【3D高斯泼溅】

在上一篇文章中&#xff0c;我开始研究高斯泼溅&#xff08;3DGS&#xff1a;3D Gaussian Splatting&#xff09;。 它的问题之一是数据集并不小。 渲染图看起来不错。 但“自行车”、“卡车”、“花园”数据集分别是一个 1.42GB、0.59GB、1.35GB 的 PLY 文件。 它们几乎按原样…

Java实现DXF文件转换成PDF

代码实现 public static void dxfToPdf(){// 加载DXF文件String inputFile "input.dxf";CadImage cadImage (CadImage) Image.load(inputFile);// 设置PDF输出选项PdfOptions pdfOptions new PdfOptions();pdfOptions.setPageWidth(200);pdfOptions.setPageHeigh…