iOS-项目设计-依赖反转

298 阅读2分钟

依赖反转

1. 什么是依赖反转?

说到依赖反转之前,我们先来谈谈我们项目开发中对象的一般依赖关系;假设我们现在有MeViewController,它内有一个我们的HeaderView,一般情况下我们会给MeViewController声明一个HeaderView类型的headerView的属性,同时在Load中对headerView进行初始化并进行内容设置。此时我们会发现MeViewController是在其内部依赖于HeaderView,而依赖反转则恰恰和这种方式相反,MeViewController内部的headerView可以通过外部传参的方式赋予给headerView,同时将headerView声明成HeaderView类的抽象,这就是依赖反转。

2. 依赖反转实现步骤

  • a. 定义对象内部需要依赖的对象的协议;
  • b. 通过对象内部定义的抽象(协议)实现内部逻辑;
  • c. 实现对象要如何进行依赖注入,通过方法、还是属性;
  • d. 通过定义的对象协议实现具体要依赖的对象;
  • e. 在外部初始化对象、初始化依赖的具体对象,并通过c步骤的实现将依赖对象注入。

3. 依赖反转的优点是什么呢?

对象内部依赖其他对象的抽象,这种设计方法是符合六大设计原则中的依赖倒置、开闭原则,使得整个项目低耦合同时更具扩展性。

4. 依赖反转的实现方案有哪些?

  1. 依赖注入:方法注入、属性注入。
  2. 服务定位:静态服务定位、动态服务定位。

5. 总结

总之我们在项目编码中,要遵循对象内部不应该强依赖具体实现而是依赖其抽象;对象内部除了基础对象(与业务逻辑无关)不应该出现对某一具体对象的依赖。