设计原则(一):SOLID 概览

简介: 设计原则(一):SOLID 概览

背景介绍


这是我的《架构整洁之道》系列的第五篇,从这一篇开始,我们将要一起学习设计原则~

《架构整洁之道》系列:



设计原则


通常来说,要想构建一个好的软件系统,应该从写整洁的代码开始做起。毕竟,如果建筑所使用的砖头质 量不佳,那么架构所能起到的作用也会很有限。反之亦然,如果建筑的架构设计不佳,那么其所用的砖头质 量再好也没有用。这就是 SOLID 设计原则所要解决的问题。


一般情况下,我们为软件构建中层结构的主要目标如下:


  • 使软件可容忍被改动。
  • 使软件更容易被理解。
  • 构建可在多个软件系统中复用的组件。


在这里之所以会使用“中层”这个词,是因为这些设计原则主要适用于那些进行模块级编程的程序员。SOLID 原则应该直接紧贴于具体的代码逻辑之上,这些原则是用来帮助我们定义软件架构中的组件和模块的。


  • SRP:单一职责原则

每个软件模块都有且只有一个需要被改变的理由。

  • OCP: 开闭原则

如果软件系统想要更容易被改变,那么其设计就必须允许新增代码来修改系统行为,而非只能靠修改原来的代码。

  • LSP: 里氏替换原则

这项原则的意思是如果想用可替换的组件来构建软件系统,那么这些组件就必须遵守同一个约定,以便让这些组件可以相互替换。

  • ISP: 接口隔离原则

软件设计师应该在设计中避免不必要的依赖

  • DIP : 依赖反转原则

高层策略性的代码不应该依赖实现底层细节的代码,恰恰相反,那些实现底层细节的代码应该依赖、高层策略性的代码。


结束语


网络异常,图片无法展示
|


其实仔细思考这些原则的内涵,在之前的整洁编码中也有体现,整洁的架构本身就是由坚实的框架与一砖一瓦构成,每一处都透露出这些原则的无穷奥妙。


在接下来的几篇文章中,我们将一起学习这些原则在软件架构上的意义~


最后


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

少年向来不识天高地厚
放眼处皆自负才高八斗
虽是自命风流
倒也坦诚无忧
我爱这样的少年
谦和而狂妄
骄傲又坦然☀️

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

相关文章
|
1月前
|
人工智能 供应链 物联网
行业最新发布:2025保理公司排名揭晓,海尔金融保理如何成为市场焦点
《2025年保理公司综合实力排名》发布,海尔金融保理凭借强大股东背景、科技驱动的“海创云链”平台及“SaaS+IoT+AI”生态模式,位居榜首。其以数字化手段赋能产业链,实现融资高效化、风控智能化,服务超万亿资产生态,成为产融结合标杆。该排名综合资本实力、科技能力、产业布局等多维度评估,展现行业向科技化、生态化发展的趋势,为市场主体提供权威参考。
326 0
|
11月前
|
Linux 网络安全 开发工具
[Git] 如何理解及基础操作
Git 是一种分布式版本控制系统,帮助记录文件的历史和变化,支持多人协作。它由 Linus Torvalds 于 2005 年创建,旨在高效管理大型项目。Git 的核心操作包括 `add`、`commit` 和 `push`,分别用于添加文件、提交更改和同步远程仓库。GitHub 是基于 Git 的云端平台,用户可以在上面保存和分享代码。通过简单的命令如 `git status`、`git log` 等,可以轻松管理项目版本。安装 Git 可在不同操作系统上通过命令行或官网下载完成。掌握这些基础操作后,用户可以高效地进行版本管理和协同开发。
[Git] 如何理解及基础操作
|
机器学习/深度学习 算法 大数据
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析(下)
在 Vision Transformer 大行其道碾压万物的同时,也有人在尝试非注意力的 Transformer 架构(如果没有注意力模块,那还能称为 Transformer 吗)。这是一个好的现象,总有人要去开拓新方向。相比 Attention-based 结构,MLP-based 顾名思义就是不需要注意力了,将 Transformer 内部的注意力计算模块简单替换为 MLP 全连接结构,也可以达到同样性能。典型代表是 MLP-Mixer 和后续的 ResMLP。
1465 0
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析(下)
|
Java 数据处理 数据库
深入解析Spring Batch:企业级批处理框架的技术之旅
深入解析Spring Batch:企业级批处理框架的技术之旅
PTA-查询水果价格
该程序展示一个水果菜单,包含苹果、梨、桔子和葡萄的单价,以及退出选项。用户输入编号选择查询水果,连续查询超5次或输入0则退出。输入样例1:查询桔子、错误输入、退出,输出相应价格及0价;输入样例2:连续查询多个水果直至超过限制,显示对应价格。代码通过列表和循环实现查询功能,根据用户输入输出价格。
290 0
|
开发框架 JavaScript 前端开发
什么是渐进式框架?作用是什么?如何使用?
什么是渐进式框架?作用是什么?如何使用?
1074 0
|
Java Maven
maven打包成功但项目启动时找不到其他包的内容
maven打包成功但项目启动时找不到其他包的内容
373 0
|
前端开发 JavaScript Java
基于ssm+jsp框架实现的学生选课信息管理系统【源码+数据库】
基于ssm+jsp框架实现的学生选课信息管理系统【源码+数据库】
376 0
|
存储 弹性计算 缓存
可扩展和弹性伸缩系统设计
可扩展和弹性伸缩系统设计