iOS:Swift中的依赖注入

在上一篇文章中,我们有机会从概念上定义应用程序的体系结构。 这篇文章的目的是深入了解我们正在使用的该体系结构的关键组件的实现。

在这篇文章中,我们将讨论如何实现:

依赖注入

我认为James Shore的这段话定义了依赖注入是什么:

依赖注入意味着给对象一个实例变量。 真。 而已。

依赖注入是一种软件设计模式,可以帮助您使代码更具可测试性,从而减少耦合。

习惯性依赖注入模式面临单例模式。 我认为,根据我作为iOS开发人员的经验,我建议在大多数情况下使用依赖项注入模式,因为除其他外,它在测试期间隔离类非常方便。 尽管这两种模式在每种情况下均有效,但是由于项目的某些组件在某些访问模式下可以更好地工作。

有一些替代方案,例如Swinject,可以在项目中实现依赖项注入,但是在向项目添加新的依赖项之前,我们希望向我们提出一个关键问题:确实有必要吗? 我们可以解决这种需求而无需添加第三方依赖项吗? 在这种情况下,我们认为可以,可以! 我们意识到我们实际上并不需要任何外部库,这就是为什么……

让我们以应用程序中一个常见情况的示例开始实施:

您有一个带有Presenter的UIViewController。 该Presenter需要一个对象来填充视图,并具有从存储库中获取数据的用例。

我们的建议是定义一个带有一系列方法的协议,这些方法将接收返回准备使用的实例所需的所有实例变量。 我们将此协议命名为Assembler

注意,我们需要初始化用例存储库,以将用例注入演示者。

现在,我们可以使用此协议来实例化UIViewController:

结论

使用这些汇编程序来解析程序依赖性的优点是:

  • 没有第三方依赖性。
  • 输入解决依赖性所需的参数,因此开发人员不会犯错误。
  • 要实例化一个组件,您需要解决其依赖性,这可以保证其行为良好。
  • 该应用程序的每个组件都是分离的,可以进行注入模拟测试。
  • 帮助您避免使用共享实例。 (…或至少让​​您考虑是否必要)

希望您发现这篇文章有趣并且对您的项目有用。 任何问题或评论都将受到欢迎!

谢谢,祝你好运!

相关文章

在以下文章中,我们详细介绍了架构中的其他关键组件:

  • Tiendeo应用程序中的MVP清洁架构
  • RxSwift +干净的架构
  • 储存库模式

这个实现受到了这篇文章的启发。