SOLID Swift:第一部分

什么是SOLID?

SOLID是一组原则,简称。 父亲是(许多人可能认识他)鲍勃叔叔。 我听到您的问题: 什么是SOLID? 好问题。

SOLID由五项原则定义:

  • 单一责任
  • 打开关闭
  • 里斯科夫替代
  • 接口隔离
  • 依赖倒置

在几篇文章中,您将了解他们的全部知识! 要记住的重要一点是,这五个原则不是严格的规则。 有时候,您会否决原则,并根据需要对其进行调整。

本文

总共将有三篇关于SOLID原理的文章。 这是第一个:这里将解释单一责任开放/关闭一篇文章将讨论Liskov替代界面隔离一篇文章将涉及依赖倒置,因为这是一个很大的主题,需要适当的解释。

单一责任

SOLID的第一个字母是单一职责 ,归结为确保任何类别仅具有一个职责。 例如:一个可以自己draw()并计算其area()Rectangle类有两个职责。

无论您如何轻松地发现Rectangle类的两个职责,都可能很难发现。 当您有一个需要requestOrders()parseOrders()saveOrders()OrderService类时,这样做可能很自然,但事实并非如此。

您能看出这堂课有多少责任吗? 至少三个:调用API,解析数据并保存。 您将要在这里划分职责。 您可以创建一个额外的OrderParser来解析订单,甚至可以创建一个带有save()方法的OrderDataSource

这样可以确保您可以更轻松地独立测试OrderParserOrderDataSourceOrderService 。 使用Swift protocol实现时,您甚至可以在测试过程中切换出实现并完全控制。

最终,您可以在一个类中使用Service,Parser和DataSource(例如)

将来,当业务逻辑发生变化时,您还可以更轻松地创建任何协议的新实现。 例如,如果API从v1更改为v2,则可以轻松添加OrderV2DataSource: OrderDataSourceProtocol {}并逐步淘汰OrderV1DataSource

打开关闭

编写易于维护的类是打开/关闭原则的关键。 有两个条件:

  • 可以扩展 :您应该能够轻松地更改或扩展类的行为。
  • 已关闭进行修改 :您必须能够扩展类而不更改实现。

归结为编写不需要每次更改需求都必须更改的代码。 让我们看一个例子,对吧?

很好,对吗? 它按预期工作。 但是,然后我们引入了一个新形状,即三角形:

好的,我们对AreaCalculator进行了一些更改,但是我们在代码中失去了清晰度。 看看我们如何将calculate方法的签名更改为采用AnyObject而不是Rectangle的数组?

if shape is Rectangle { ... } else if shape is Triangle { ... }我们还必须检入代码if shape is Rectangle { ... } else if shape is Triangle { ... } ,则这不是我们想要的。 但是,我们将如何解决呢?

现在,在这种情况下,我们只需要关心形状即可; 例如在AreaCalculator ,对于我们发明的每个形状, if shape is Rectangle {...}则可以用shape.calculate()代替。 这样不好吗

这就是本文!

如果您有任何评论,问题或讨论,请在下面发表评论! 下次:第二部分,我们讨论Liskov替代界面分离