我正在查看过去两天的“ 清洁”和“ 喷射”。谁能告诉我或向我解释依赖注入的实际用法以及它如何在iOS应用开发中帮助我们?
我真的很困惑我需要应用依赖注入的哪一部分应用程序(类),而哪些不需要。我认为这使我的代码非常复杂。
答案 0 :(得分:1)
依赖注入只不过是将依赖注入对象中,而不是负责创建对象的依赖项。
示例:
class UserViewModel {
var User = User?
}
let UserViewModel = UserViewModel()
let User = User()
UserViewModel.User = User
依赖项注入的类型:
我们将获得的好处:
- 透明度
通过注入对象的依赖关系,类或结构的职责和要求变得更加清晰和透明。通过将User注入UserViewModel中,我们了解到UserViewModel取决于User。
- 提高可测试性
使用依赖项注入使单元测试更加容易。依赖注入使开发人员可以用模拟对象替换对象的依赖关系,这使得隔离行为和设置单元测试变得更加容易和复杂。
- 关注点分离
依赖注入使我们能够以更清晰的方式理解我们的代码并分离我们的关注点。当我们使用依赖注入时,我们可以看到我们的对象负责管理和处理给定的依赖。按照上述示例之一,我们的UserViewModel负责管理和处理我们的库对象。
- 松散耦合
UserViewModel类的示例说明了如何使用协议和依赖项注入来减少项目中的耦合。协议在Swift中非常有用且用途广泛。我们讨论的示例是一种协议真正发挥作用的场景。
答案 1 :(得分:0)
在软件工程中,依赖项注入是一种技术,通过该技术,一个对象(或静态方法)可以提供另一个对象的依赖项。依赖项是可以使用的对象(服务)。
简单来说,
当类A使用类B的某些功能时,则表示类A具有类B的依赖项。
或
将创建对象的任务转移给其他人并直接使用依赖项的过程称为依赖项注入。
钻石般地:
- 对于需要应用依赖注入的应用程序(类)的哪个部分,我真的感到困惑。
您几乎广泛使用了此词,但在android中这个词众所周知。让我们来看一个例子,
假设我们有两个控制器,masterVC和detailVC。 detailVC详细显示数据,在masterVC中选择了哪些数据。现在,您需要将选定的数据(ID,密钥)从masterVC传递到detailVC。为此,您需要访问masterVC中的detailVC方法或变量,如下所示,
let objDetailVC = DetailVC() // Init of class
objDetailVC.ID = selectedID
// push controller
现在,detailVC取决于ID,称为依赖注入( DI )。
- 我认为这使我的代码非常复杂。
否,它使您的项目更具动态性。目前,我借助MVC结构和依赖项注入在单个控制器中管理5个控制器。项目非常顺利,管理良好,代码可重用性高。
所有这些取决于您如何管理代码。
编辑
您可以像上面的示例一样使用DI,也可以在detailVC中创建方法并将其像抽象一样对待。
有关更多详细信息,请参见:Cocoacast: Nuts and Bolts of Dependency Injection in Swift