我一直在学习如何使用Dagger2编写更简洁的代码,并尊重依赖注入和依赖倒置的原理。但是我不知道这两个原则是否真的需要实现像Dagger2这样的工具。
以下面的简单代码为例:
class Computer(){
val keyboard:Keyboard
val mouse:Mouse
init{
keyboard = Keyboard()
mouse = Mouse()
}
}
这是不遵循D.Injection或D.Inversion的类的示例。如果我们稍微修复一下。
class Computer(keyboard:KeyboardInterface, mouse:MouseInterface){
...}
现在,我们根据以下两个原则对其进行了改进:-依赖关系注入:我们的计算机类不必构建(或知道如何构建)键盘和鼠标类。这些类的实现被注入到构造函数中。-Dependency Inversion:我们的计算机类没有收到特定的类,但有接口。因此,我们引入了一个抽象级别,我们的类不依赖于这些类的特定实现,而是依赖于方法的抽象定义(在接口中定义的方法)。
因此,仅遵循代码原则,我们无需使用任何外部库即可实现这两个原则。我知道会有很多样板代码,Dagger2可以为您构造对象,从而使代码更简洁。但是我的问题是,除了更干净的代码之外,Dagger2还提供了什么值?
如果您不知道自己在做什么,就可以轻松使用Dagger2而不执行DI原理。与此相反,您可以在不使用Dagger2的情况下实现DI原理(这只是一个不太干净的代码)。那我想念什么吗?为什么在每个项目中似乎都必须使用Dagger2之类的工具?
如果您的项目增长到足够大的大小,则样板可以成为您代码中的绝大部分。如果您弄错了样板,很容易搞砸并引入错误。如果您想更改事情,而又不想重做很多样板,则可能很难重组应用程序。这一点-样板变得令人压抑-可能比您想象的要早得多。
您可以在不依赖注入的情况下构建任何应用。但是你能维持吗?您可以更新吗?