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

news2024/12/23 12:17:38

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

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

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

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

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

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

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

相关文章

《哈佛商业评论》:CRM实施为什么成功率低?

《哈佛商业评论》研究表明,三分之一的CRM客户管理系统实施以失败告终。CRM实施为什么成功率较低?研究发现,CRM实施失败的主要原因在于:CRM系统目标不清晰,重点不明确,操作过于复杂,给一线用户带…

NIO的浅了解

一、五种IO类型 1、阻塞IO 用户进程一直等待数据准备好,在复制完成之前都是阻塞的 2、非阻塞IO 用户进程需要不断轮询查看是否数据准备好 优化了提升并发连接数量,但是每一个请求都需要创建一个socket建立连接,每个线程都需要去遍历轮询&am…

ZooKeeper+Kafka+ELK+Filebeat集群搭建实现大批量日志收集和展示

大致流程:将nginx 服务器(web-filebeat)的日志通过filebeat收集之后,存储到缓存服务器kafka,之后logstash到kafka服务器上取出相应日志,经过处理后写入到elasticsearch服务器并在kibana上展示。 一、集群环…

4、创建第一个鸿蒙应用

一、创建项目 此处以空模板为例来创建一个鸿蒙应用。在创建项目前请保持网页的畅通。 1、在欢迎页面点击“Create Project”。 2、左侧默认为“Application”,在“Template Market”中选择空模板(Empty Ability),点击“Next” 3…

Redhat Linux v8.2 实时内核环境配置及参数调优

BC-Linux V8.2 实时内核环境配置及参数调优 -------物理机 & 虚拟机 一、前言 本文档包含有关Redhat Linux for Real Time的基本安装和调试信息。许多行业和组织需要极高性能的计算,并且可能需要低且可预测的延迟,尤其是在金融和电信行业中。延迟&…

FAB天车系统OHT 介绍

1.技术背景: “OHT”是Overhead Hoist Transport的简称,是指能够在空中轨道上行驶,并能够通过皮带传动起重机构“直接”进入保管设备或工艺设备的装卸口,应用于工序区内部运输,也应用于工序区间或工厂间运输。 “OHT…

VMware ubuntu 新虚拟机的创建

根据自己指定的路径安装好vm后。 创建新的虚拟机。 记录一下,下次用到别再忘记了。 如需转载,注明出处! 点赞收藏关注我 以资鼓励 打开vm 软件,点击创建新的虚拟机 选择典型,点击下一步 选择你的ubuntu镜像iso文件 …

2023测试职业生涯必看系列:手写web自动化测试框架教程 涵盖框架源码+视频教程以及搭建流程

前言 ​ 测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。 有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少? 其实,性能的要求比…

如何利用 cpolar 内网穿透技术实现 U8 用友 ERP 异地访问

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上,点击开始菜单栏,打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

Leetcode_203.移除链表元素—C语言

目录 ❣️1.题目❣️ ❣️2.解答❣️ 💞方法一:暴力法 💞方法二: 尾插法 💞方法三:哨兵位法 ❣️1.题目❣️ 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.va…

高可用架构设计

1. 引言 软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,本篇讨论高可用 高可用技术的重要性在于保证系统的连续可用性,提高系统的稳定性和可靠性。它可以应对高并发和大规…

2783爱心公益网站的设计与实现JSP【程序源码+文档+调试运行】

一、摘要 本文将详细介绍一个基于Web的爱心公益网站的设计和实现。该网站包括前台用户模块和后台管理员模块,能够满足用户和管理员的不同需求。通过对用户和管理员的功能需求分析,本文将重点阐述数据库设计和界面设计的关键环节,同时介绍如何…

区块链链游合约系统开发项目模式技术方案

​随着区块链技术的发展,链游合约系统开发逐渐成为了一个备受关注的项目。本文将探讨区块链链游合约系统开发项目的技术方案,包括项目背景、开发目标、技术架构、系统流程、安全措施等方面的内容。 一、项目背景 链游是一种基于区块链技术的游戏&#xf…

初识MySQL(一)(创建数据库,查看删除数据库,备份和恢复,创建表,数据类型)

目录 客户端 ------> MySQL服务(3306) 数据库三层结构-破除MySQL神秘 创建数据库 查看删除数据库 备份恢复数据库 创建表 MySQL常用的数据类型(列类型) ​编辑 ​编辑整型 bit类型 小数类型 字符串类型 日期类型的使用 客户端 ------> MySQL服务(3306) 连接…

nmap原理与使用

kali的命令行中可以直接使用 nmap 命令,打开一个「终端」,输入 nmap 后回车,可以看到 nmap 的版本,证明 nmap 可用。 一、端口扫描 扫描主机的「开放端口」,在nmap后面直接跟主机IP(默认扫描1000个端口&am…

Java基础-基础语法

1、概述 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;…

酉矩阵(Unitary Matrix)

对于n阶复数矩阵A,如果,其中表示矩阵A的共轭转置,为单位矩阵,那么就称A为酉矩阵。 对于酉矩阵, 如果酉矩阵的元素都是实数,那么该矩阵就是正交矩阵。

Redis应用之二分布式锁2

一、前言 前一篇 Redis应用之二分布式锁 我们介绍了使用SETNX来实现分布式锁,并且还遗留了一个Bug,今天我们对代码进行优化,然后介绍一下Redisson以及数据库的乐观锁悲观锁怎么用。 二、SetNX分布式锁优化后代码 RedisService.java Inven…

计算机中msvcp140.dll丢失的解决方法,修复msvcp140.dll报错问题

使用电脑的过程中,我们常常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。msvcp140.dll是Microsoft Visual C运行时库的重要组成部分,丢失该文件可能导致程序无法正常运行、系统崩溃等问题。本文将详细介绍msvcp140.dll丢失的原因及…

刨根问底:Java中的“\p{P}”到底是什么意思

问题由来: 在代码中看到了Pattern.compile("\\p{P}"),用来识别符号,但是这个正则表达式却不匹配加号,所以\p{P}到底是什么意思呢 谷歌了一下,找到StackOverflow上有人问了一模一样的问题 可是这个问题被关…