文章目录
项目应用
在项目中有很多这样的场景:某类ClassA依赖于服务ServiceA和服务ServiceB:
比如某个Presenter类(数据管理类)中需要网络请求获取数据,也需要从数据库获取数据,这个时候,就需要在Presenter类中创建网络请求服务类和数据库请求服务类的实例,然后才能使用服务中的方法。这种场景很普通,也是正常的逻辑,但是这种情况下,存在不少问题:
- 尝试替换或更新依赖项(ServiceA或B),必须更改类(ClassA)的源代码并且重新编译。
- 依赖项(ServiceA或B)的具体实现必须在编译时可用。
- 测试该类非常困难,因为类对依赖项有直接的引用,则依赖项不能使用Stub或Mock对象替换。
- 该类(ClassA)包含用于创建、定位和管理依赖项(ServiceA或B)的重复代码。、
1.设计目标:
- 把类与依赖项解耦,从而使这些依赖项可被替换或者更新。
- 类在编译时并不知道依赖项的具体实现。
- 类的隔离性和可测试性非常好。
- 类无需负责依赖项的创建、定位和管理逻辑。
- 通过将应用程序分解为松耦合的模块,达成模块间的无依赖开发、测试、版本控制和部署。