【架构基础】SOLID原则

news2024/11/25 23:39:05

SOLID原则是一套坚实而有效的软件设计原则,它由Robert C. Martin(也称为 Uncle Bob)在2000年提出,旨在帮助软件开发者设计出高内聚低耦合的软件,构建易于测试、可维护和可扩展的软件系统,降低软件后期的维护成本。

SOLID由5个设计原则组成:

单一职责原则(Single Responsiblity Principle,SRP)

开闭原则(Open Close Principle,OCP)

里式替换原则(Liskov Substitution Principle,LSP)

接口隔离原则(Interface Segregation Principle,ISP)

依赖倒置原则(Dependency Inversion Principle,DIP)

 

单一职责原则

单一职责指的是一个类或一个方法只做一件事。如果一个类承担的职责过多,就等于把这些职责耦合在了一起,某一个职责的变化就可能抑制或者削弱该类完成其他职责的能力。

单一职责原则是康威定律(Conway’s law)的一个推论。后者由马尔文康威于1967提出:设计系统的架构受制于产生这些设计的组织的沟通结构。

开闭原则

软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。简单的来说,开闭原则强调可扩展性,即当我们增加新的功能时,最好是以扩展的方式进行,而不是打破现有设计,修改现有的代码。

里式替换原则

里氏替换原则通俗来讲,就是子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

推广开来,就是要求我们按照契约编程。明确接口的输入、输出或返回值满足契约的要求。

接口隔离原则

接口隔离原则要求下游模块对上游模块的依赖,应当建立在最小的接口集上。上游模块不应该暴露那些下游模块不需要的接口;否则,上游模块不相关的修改,也可能会影响到下游模块的运行。它体现了最小依赖原则。

依赖倒置原则

高层模块(High level modules)不应该依赖于低层模块(Low level modules),而应该依赖于抽象。

对于高层模块依赖于低层模块的场景,通过依赖注入(Dependency Injection)的方式实现依赖反转,让高层模块与低层模块共同依赖稳定的抽象接口。该抽象接口必须由高层模块定义,并明确输入与输出,而低层模块根据约束完成接口实现。

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

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

相关文章

青春永不散场

虽然人生总是在不断的离别与相遇,但请相信这一次的离别是为了下次更美好的相遇。 一.毕业感想 四年的大学生活即将画上句号,让我不由得感慨万千。这四年里,我经历了无数的挑战和机遇,也结交了一群志同道合的朋友,收获…

抖音小程序+抖音矩阵系统开发:新玩法,新趋势

抖音seo优化源码,抖音seo矩阵系统搭建,抖音账号矩阵系统开发,企业在做账号矩阵过程中,最头疼的莫过于私域线索转化,作为开发者都知道,目前市面上我们了解的矩阵系统除了挂载POI信息外,无法挂载留…

【剑指offer】旋转数组的最小数字

文章目录 题目思路代码实现 题目 题目链接入口:JZ11 旋转数组的最小数字 思路 1.核心考点 (1)数组理解,二分查找,临界条件。 2.解题思路 (1)题目要求查找出一维数组的最小值,本…

变分模态分解(VMD)学习

目录 概述构造变分问题变分求解问题(引入拉格朗日)关于变分构造中的函数理解关于Uk(t)关于希尔伯特变换关于频谱调制 VMD算法(python) 概述 变分模态分解由Konstantin Dragomiretskiy于2014年提出,可以很好抑制EMD方法的模态混叠现象(通过控制带宽来避免…

信息竞赛笔记(2)––快速幂

目录 快速幂 定义 分析 代码 递归实现 非递归实现(通用方法) 模意义下取幂 快速幂 定义 快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在的时间内计算的小技巧,而暴力的计算需要的时间。 这个技巧也常常用在非计算的场景,因为它可…

【论文】通过基准分析优化联邦人员重新识别的性能

论文链接 目录 摘要1. 绪论2. 相关工作2.1 人员重新识别2.2 联邦学习 3. 联邦 个人REID基准3.1 数据集3.2 联合方案3.3 模型结构3.4 联邦学习算法3.5 性能指标3.6 参考实现4.1 通过相机联合方案4.2 按数据集联合方案 5. 性能优化5.1 知识蒸馏5.2 权重调整5.3 知识蒸馏和体重调…

提高代码质量的秘诀:类、方法、字段和包注释

🧑‍💻CSDN主页:夏志121的主页 📋专栏地址:Java基础进阶核心技术专栏 目录 🍢 一、注释的插入 🍣 二、类注释 🍤 三、方法注释 🍥 四、字段注释 🥮 五、…

GreenPlum集群部署之抽丝剥茧

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

【stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里】

文章目录 一、前言(可跳过)二、stable diffusion1.clip2.diffusion modelforward diffusion (前向扩散)逆向扩散(reverse diffusion)采样图阶段小结 3.Unet modeltimestep_embedding采用正余弦编码 三、sta…

华为OD机试真题 Java 实现【求符合要求的结对方式】【2023Q1 100分】,附详细解题思路

一、题目描述 用一个数组A代表程序员的工作能力,公司想通过结对编程的方式提高员工的能力,假设结对后的能力为两个员工的能力之和,求一共有多少种结对方式使结对后能力为N。 二、输入描述 6 2 3 3 4 5 1 6 第一行为员工的总人数&#xff…

精简总结:一文说明软件测试基础概念

基础概念-1 基础概念-2 目录 一、什么是软件测试? 二、软件测试的特点 三、软件测试和开发的区别 1、内容: 2、技能区别 3、工作环境 4、薪水 5、发展前景 6、繁忙程度 7、技能要求 四、软件测试与调试的区别 1、角色 2、目的 3、执行的阶…

Lecture 7 Deep Learning for NLP: Feedforward Networks

目录 Deep LearningFeedforward Neural Network 前馈神经网络Neuron 神经元Output Layer 输出层OptimizationRegularization 正则化Topic Classification 主题分类Language Model as Classifiers 语言模型作为分类器Word Embeddings 词嵌入Training a Feed-Forward Neural Netw…

RVOS操作系统协作式多任务切换实现-03

RVOS操作系统协作式多任务切换实现-03 任务(task)多任务 (Multitask)任务上下文(Context)多任务系统的分类协作式多任务 创建和初始化第 1 号任务切换到第一号任务执行协作式多任务 - 调度初始化和任务创建…

虚拟机-安装与使用2023

虚拟机-安装与使用 前言 一、虚拟机 1.VMware 2.Virtualbox 二、VMware 的下载 三、VMware 的安装 四、验证是否安装成功 五、运行 VMware 六、VMware 上安装其它操作系统 安装 Windows 10安装 CentOS-Linux安装 Kali-Linux 七、VMware 常用功能同步时间系统备份克隆快照内存设…

黑马Redis视频教程高级篇(多级缓存案例导入说明)

目录 一、安装MYSQL 1.1、准备目录 1.2、运行命令 1.3、修改配置 1.4、重启 二、导入SQL 三、导入Demo工程 3.1、分页查询商品 3.2、新增商品 3.3、修改商品 3.4、修改库存 3.5、删除商品 3.6、根据id查询商品 3.7、根据id查询库存 3.8、启动 四、导入商品查询…

Maven高级——私服(完结撒花!)

作用与介绍 一个公司内有两个项目组,如果其中一个开发了一个依赖tlias-utils,另一个项目组要使用的话要么就是传过来直接install放到自己的本地仓库里面的。 但是也可以搭建一个公共仓库,专门供公司局域网内部使用,也就是所谓私服。 然后在…

chatgpt赋能python:Python反向函数:在编程中的威力

Python反向函数:在编程中的威力 在Python中,反向函数是一个强大且常用的工具,可以帮助程序员在编写代码时更加高效和精确地处理数据。在本文中,我们将讨论Python反向函数的用途和实现,并详细介绍如何在您的代码中使用…

Java007——Java注释介绍

围绕以下3点介绍: 1、什么是Java注释? 2、Java注释的作用? 3、Java注释长什么样,以及怎么使用Java注释? 一、什么是Java注释? Java注释是在Java程序中用来描述代码的特殊语句。 注释被忽略并且不被编译器…

MySQL表的增删改查

目录 一、Create 1.insert 2.更新 3.替换 二、Retrieve(查找) 1.select 2.where 3. 结果排序 4. 筛选分页结果 三、Update 四、Delete 1.删除数据 2.截断表 五、聚合函数 1.count: 2.avg 3.sum 4.max 5.min 六、Group …

微信小程序开发实战 ②④(自定义 TabBar练习)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…