如何在iOS中应用依赖反转

您在大学时代曾经遇到过有关依赖倒置原则的话题吗? 在面向对象的编程中,该原理指的是解耦软件模块的一种特定形式(如Wiki所述:https://en.wikipedia.org/wiki/Dependency_inversion_principle)

高级模块不应依赖于低级模块。 两者都应依赖抽象。
抽象不应依赖细节,而细节应依赖抽象。

在我大学期间,这个概念似乎真的很有价值,但是我从来没有实践过。 当我们将此原则付诸实践时,我们可以意识到它可以在开发项目结构方面起到多大的作用。 对于许多开发原则,去耦是设计代码中最重要的方面之一,而该原则解决了这一挑战。 但是我们如何在我们的iOS项目中应用这一原理?

实际上,我们不需要从头开始创建遵循依赖关系反转的类。 实际上,Apple鼓励我们使用这种模式。

委派模式是整个iOS应用程序中最常用的模式之一。 如果您曾经使用过UIImagePickerController并实现了它的方法以符合标准,那么您已经遵循了依赖关系反转原理。

同样,当我们通读以下内容时:
高级模块不应依赖于低级模块。 两者都应依赖抽象。

高级模块是UIImagePickerController-该模块可以独立运行,并且具有功能框架(即抽象)。 但是其功能的使用尚不确定。 这是低级模块现在定义的时间(这是您的代码)

抽象不应依赖细节,而细节应依赖抽象。

还要注意这一点,当您在iOS中使用要求您遵守协议的类或模块时,需要您的类来实现其方法。 即,UITableViewDatasource,UItableViewDelegate,UIImagePickerController等。

即使苹果已经为我们提供了具有依赖关系反转就绪类的类,但是在我们公司的发展中仍有一段时间我们公司希望我们创建模块化的类,这些类可以在其他项目中重用。 (是的,为将来的项目节省时间和金钱。)

借助依赖关系反转的心态,我们可以重构一些旧项目,甚至可以从那里的可重用模块中提取出来。 就像您真正喜欢的“位置选择器”或“自定义相机控制器”一样。 您甚至可以制作符合特定标准或公司感觉的模块。