SOLID Swift:第一部分
什么是SOLID?
SOLID是一组原则,简称。 父亲是(许多人可能认识他)鲍勃叔叔。 我听到您的问题: 什么是SOLID? 好问题。
SOLID由五项原则定义:
- 单一责任
- 打开关闭
- 里斯科夫替代
- 接口隔离
- 依赖倒置
在几篇文章中,您将了解他们的全部知识! 要记住的重要一点是,这五个原则不是严格的规则。 有时候,您会否决原则,并根据需要对其进行调整。
本文
总共将有三篇关于SOLID原理的文章。 这是第一个:这里将解释单一责任和开放/关闭 。 下一篇文章将讨论Liskov替代和界面隔离 。 上一篇文章将涉及依赖倒置,因为这是一个很大的主题,需要适当的解释。
单一责任
SOLID的第一个字母是单一职责 ,归结为确保任何类别仅具有一个职责。 例如:一个可以自己draw()
并计算其area()
的Rectangle
类有两个职责。
无论您如何轻松地发现Rectangle
类的两个职责,都可能很难发现。 当您有一个需要requestOrders()
, parseOrders()
和saveOrders()
的OrderService
类时,这样做可能很自然,但事实并非如此。
您能看出这堂课有多少责任吗? 至少三个:调用API,解析数据并保存。 您将要在这里划分职责。 您可以创建一个额外的OrderParser
来解析订单,甚至可以创建一个带有save()
方法的OrderDataSource
。
这样可以确保您可以更轻松地独立测试OrderParser
, OrderDataSource
和OrderService
。 使用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替代和界面分离 。