Swift SOLID 3. 接口隔离

💡 原文中文,约5800字,阅读约需14分钟。
📝

内容提要

SOLID原则是面向对象编程的五个基本原则之一,旨在帮助开发人员构建可管理和可扩展的系统。接口隔离原则(ISP)是其中之一,它指出客户端不应被迫依赖于他们不使用的接口。遵循ISP可以增强模块的可保护性、代码的可重用性,并减少模块之间的耦合。这个原则可以应用于Swift编程语言,以规划更灵活和可维护的应用。

🔎

延伸解读

胖接口的代价:从可选返回值说起

文章中的 Machine 协议要求所有实现类完成 convert、fax、copy 三个方法,导致 FaxMachine 和 PhoneMachine 不得不为不支持的功能返回 nil。这迫使调用方处理可选值,增加了不必要的解包逻辑。这种设计本质上是将多个职责耦合在一个协议中,违反了单一职责,也使得修改任一方法都可能影响所有实现类,带来额外的构建和测试成本。

拆分接口的实用判断:中期与长期收益

文章建议在拆分接口前先问两个问题:接口隔离是否会带来中期收益和长期收益。这提示我们,接口隔离不是无条件的,盲目拆分可能导致过度规划。合理的做法是评估当前和未来的使用场景,如果拆分能减少不必要的依赖、提高可测试性,并且收益可持续,才值得进行。否则,保持适度粗粒度可能更务实。

从实现优先到接口优先的思维转变

文章指出,如果先考虑具体实现再设计接口,容易把所有方法塞进一个协议;而先考虑接口设计,则会更自然地将不同能力划分到不同协议中。这一观察对 Swift 开发者有实际意义:在定义协议时,应优先从客户端需要什么能力出发,而不是从现有类有哪些方法出发。这样能避免 fat interface,并让协议更贴合使用场景。

❓

Q&A

什么是接口隔离原则(ISP)?

接口隔离原则(ISP)指出客户端不应被迫依赖于他们不使用的接口。

遵循接口隔离原则有什么好处?

遵循接口隔离原则可以增强模块的可保护性、提高代码的可重用性,并减少模块之间的耦合。

什么是Fat interface,它有什么问题?

Fat interface是指一个接口中包括太多的办法或属性,导致不必要的重构和额外的测试。

如何在Swift中应用接口隔离原则?

在Swift中,可以通过细分接口,使客户端类只依赖于它们真正需要的方法,防止不必要的依赖。

接口隔离原则如何影响代码的可维护性?

遵循接口隔离原则可以提高代码的可理解性和可测试性,从而增强代码的可维护性。

在接口设计中,如何避免过度规划?

在接口拆分时,需要找到合适的状态,避免盲目进行接口隔离,确保带来中期和长期收益。

🏷️

标签

➡️

继续阅读