SOLID 原则是什么?

Solve china dataset issues with shared expertise and innovation.
Post Reply
suchona.kani.z
Posts: 350
Joined: Sat Dec 21, 2024 5:32 am

SOLID 原则是什么?

Post by suchona.kani.z »

SOLID 原则是软件开发中使用的设计规范。该术语由 Robert C. Martin 创造,描述了五个设计原则,这些原则规定了函数和数据结构如何在类中排列以及这些类应如何相互连接。

SOLID 的目标是创建能够容忍修改、易于理解并构成许多软件系统中使用的组件基础的软件。

以下旨在提供尽可能易于理解的原则概述。我不会讲太多细节,因为关于各个原则的出版物和文章要广泛得多。

SRP:单一职责原则
OCP:开闭原则
LSP:里氏替换原则
ISP:接口隔离原则
DIP:依赖倒置原理
SRP单一职责原则
单一职责原则 (SRP) 可能是 SOLID 原则中最容易被误解的原则。根据 Robert C. Martin 的说法,软件开发人员倾向于假设每个模块应该只执行一项任务。将大功能重构并划分到最低层的原则确实存在,但这不是SRP的含义。一般来说,SRP的描述是:

“修改一个类的理由永远不应该超过一个。”
然而,由于在大多数情况下,软件是为客户/利益相关者或用户编写的,并且类的概念此时过于具体,因此建议使用 Robert C. Martin 的以下声明:

“一个模块应该对一个且仅一个参与者负责”
例如,您可以采用一个为不同业务领域提供功能的模块。如果 渔业和林业电子邮件列表 业务的某个领域发生变化,需要更改类的结构,这可能会影响组织的另一部分所需的类部分。这会产生可能阻碍软件开发的依赖关系。因此,以只有一个参与者负责需求和调整的方式设计类和方法是有意义的。


因此,SRP 主要是关于函数和类以及它们与创建需求的参与者的连接。

OCP开闭原理
开闭原则(OCP)由 Bertrand Meyer 提出:

“软件实体应该对扩展开放,但同时对修改关闭。”
或者还有:软件实体的行为应该具有足够的可扩展性,以至于不需要修改。现在可以说,如果对软件的更改导致需要大量干预,那么该软件的架构就失败了。

有哪些选项可以在不修改软件的情况下扩展软件?当马丁在 90 年代接手迈耶的原理时,他在技术上以不同的方式实现了它。对于 Meyer 来说,解决方案是使用面向对象世界中已知的继承。在当时,这是软件可维护性和可扩展性的重要因素。一个例子:假设我们有两个类别:汽车和跑车。跑车类别将继承乘用车类别的所有重要属性和功能。然后将在跑车类别中添加特定的功能和特性。这里的依赖只朝一个方向发展,这是一件好事。

要更进一步,您可以使用接口来扩展此示例。这正是马丁在他的例子中所做的。

因此,OCP 的扩展版本是当今明智且广泛使用的原则。例如,虽然继承会产生分裂,但在 Java 中并不存在真正的多重继承。相反,使用接口,而接口又可以越来越多地在类中实现。目标和目的应该始终是保护较高层次结构的类免受较低层次结构的类的修改。
Post Reply