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

标签 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 来正确理解依赖注入(inject),但我的问题是,为什么我需要使用 Dagger?我确实了解解耦组件可以更轻松地进行测试,但这是否一定适用于小型项目?为什么不直接在 ViewModel、Repository、DAO 之间交互而无需注入(inject)(可能在构造函数上传递类)?

附带说明一下,从 Kotlin 入手可能是个不错的选择。虽然我觉得它很酷,但我看到官方文档/指南的许多部分仍然只有 Java 示例......所以我有点想用旧的 Java 学习新的东西,但同时,因为我以前的项目是javascript,切换到 kotlin 不会那么难......

最佳答案

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

在小项目中使用 dagger 是有争议的。如果您的项目包含简单的依赖关系图并且不是一个不断发展的项目,则从 Dagger 添加的代码(和足迹)可能有点太多(如果您还不熟悉,更不用说学习曲线了)。

但在我看来,使用依赖注入(inject)总是一件好事。它提倡 SOLID 原则和更简洁的架构。

关于android - 为什么将 Dagger 与 Android 架构组件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50748773/

相关文章:

kotlin - 如何取消特定类(class)的Dokka文档?

android - 如何从 Google Fit Api 获取最近的高度和体重

Android - 如何使用 Google Forms 等动画更改 EditText 线条颜色?

Proguard 混淆后 Android 应用程序崩溃

java - 避免内存泄漏的好方法

.net - 模型和 View 模型应该包含什么?

firebase - 如何在 firebase 数据库中使用 kotlin 协程

Android - 如何在微调器上获取所选项目的另一个值

wpf - Resource 中的 DataTemplate 将 ViewModel 设置为 View,但随后

java - ARCore – 渲染距离相机 200 米的物体