为什么将Dagger与Android架构组件一起使用

时间:2018-06-07 19:21:42

标签: android mvvm kotlin dagger-2

我已经在Android开发和男孩中缺席了大约一年,这是一大块咀嚼:Kotlin,LifeCycle,Room,ViewModel,Dagger等等。

我正试图了解新的MVVM推荐模式,虽然看到更多标准化的东西真的很棒"有些事情不清楚。

要以简单的方式处理事情,请提供简短的样本。

首先,创建实体

@Entity(tableName = "user_table")
public class User {

   @PrimaryKey
   @NonNull
   @ColumnInfo(name = "name")
   //vars, getters, setters
}

然后创建DAO

@Dao
public interface UserDao {

   @Insert
   void insert(User user);
...
}

然后,我需要创建存储库。这基本上就是我的问题所在。

我看到许多例子,官方文档也使用Dagger2。虽然我仍然很难与Dagger斗争以正确理解依赖注入我的问题是,为什么我需要使用Dagger?我确实理解去耦组件可以更容易地进行测试,但这对小型项目来说是否必然?为什么不直接在ViewModel,Repository,DAO之间进行交互而不注入(可能在构造函数上传递类)?

作为旁注,可能从Kotlin开始是个好点。虽然我发现很酷但我发现官方文档/指南的许多部分仍然只有Java样本......所以我有点想学习旧Java的新东西,但同时,因为我以前的项目是javascript,切换到kotlin并不会那么难......

1 个答案:

答案 0 :(得分:2)

依赖注入有很多好处。正如您已经指出的那样,它促进了解耦和可测试性。但是,匕首真正吸引的是依赖管理的便利性。 Dagger在编译时计算出你的依赖图,甚至提供了本地化(或全球化)生命周期和范围的机制。它也是基于组件的,因此它可以很容易地构建。

在小型项目中使用匕首是有争议的。如果你的项目包含简单的依赖图并且不是一个不断发展的依赖图,那么来自dagger的附加代码(和足迹)可能会有点过多(如果你还不熟悉的话,更不用说学习曲线了)。

但在我看来,使用依赖注入总是一件好事。它促进了SOLID原则和更清洁的架构。