Swift的SOLID面向对象设计原则

iOS首席工程师Buymie的Mnats Karakhanyan

好的软件系统应该具有好的架构和构建块。 如果没有很好地构建模块,那么体系结构就没什么大不了的,那么您最终可能会使用构建良好的模块构建一个糟糕的系统。

这就是SOLID原则的用武之地。

SOLID原理告诉我们如何将我们的功能和数据结构安排到类中,以及如何将这些类互连。

注意: “类”一词并不意味着这些原则仅适用于面向对象的软件。 类只是功能和数据的耦合分组。 每个软件系统都有这样的分组。

SOLID是5条原则的首字母缩写,代表:

  • S:单一责任原则(SRP)
  • O:开闭原理(OCP)
  • L:李斯科夫替代原理(LSP)
  • 一:接口隔离原理(ISP)
  • D:依赖反转原理(DIP)

这些原则的目标是创建以下软件结构:

  • 容忍变化
  • 容易理解,并且
  • 是可在许多软件系统中使用的组件的基础。

SRP:单一责任原则

类或模块应该有一个更改理由,并且只有一个更改理由

该原则为我们提供了责任的定义和班级规模的准则。 班级应该承担一项责任-改变的原因之一。

违反SRP的示例。

让我们看看这堂课有什么样的责任?

  • 从API检索数据
  • 解析API响应
  • 将数据保存在数据库中

我们可以解决此问题,将职责移至类:

注意:听到这个名称太容易了,然后假设它意味着每个模块都只能做一件事 。 有这样的原则。 一个函数应该做一件事情,并且只能做一件事情。

违反原则的症状是意外复制合并。

OCP:开放封闭原则

软件实体(类,模块,功能等)应打开以进行扩展,但应关闭以进行修改

让我们看一个违反OCP的例子。 考虑类AnaliticServise,该类正在跟踪Facebook中的事件。

现在,我们还想增加在Google Analytics(分析)中跟踪相同事件的可能性。 不违反OCP的解决方案可能如下所示:

注意:遵循OCP通常会引入新的抽象级别,这会增加我们代码的复杂性。 您想专注于最有可能在您的设计中发生变化的领域,并在其中应用原理。

LSP:李斯科夫替代原则

令Φ(x)是关于类型T的对象x的可证明性质。那么对于类型S的对象y,其中S是T的子类型,则Φ(y)应该成立。