Pojo类的依赖注入

时间:2017-07-29 14:03:43

标签: dependency-injection dagger-2

目前我正在努力了解依赖注入。假设我有以下课程:

相册

public class Album {
    private String id;
    private String name;
    private String cover;
    private Artist artist;
}

歌曲

public class Song  {
    private String id;
    private String title;
    private Artist artist;
    private Album album;
}

艺术家

public class Artist {
    private String id;
    private String name;
}

所以Song取决于Album,而ArtistAlbum取决于Artist。假设我从数据库中获取所有必需的字段。目前,所有成员都通过构造函数传入。通常我会多次创建相同的专辑对象(在同一专辑的每首歌曲的循环中)。这是依赖注入可以避免的吗?

我如何使用Dagger2做到这一点?我真的不明白这一点。这只是“将构造函数”移出课堂吗?

1 个答案:

答案 0 :(得分:5)

如果您使用Dagger创建模型类,那么您肯定会做错事。

理论上,这当然是可能的。您仍然需要一个循环,但现在您将创建组件并传入参数,以便他们可以分别创建ArtistAlbumSong。将ArtistComponent提供给Artist等的AlbumComponent

最后你仍然有一个循环,但这次只是创建组件来创建你需要的对象。你在这里获得的唯一的东西是很多开销和比以前更多的对象创建。所以不,请不要在这里使用Dagger。

依赖注入旨在将您的业务逻辑链接在一起。如果您有一个从数据库中读取的ArtistDao,那么您可能还需要ArtistPresenter,要求所述DAO正常工作。 ArtistDao仍然可以读取和创建艺术家(数据模型),但您可以使用Dagger创建DAO并将其传递给演示者。

  

这只是"移动构造函数"不在课堂上?

Dagger并没有神奇地创造物体。如果您有依赖项,您仍然在构造函数中声明该依赖项。 Dagger将使用正确的参数为您调用构造函数,并可能将创建的对象保留在以后(范围)。

依赖框架旨在减少样板,您可以在其中创建一个对象,将其传递给下一个对象,等等。它们将解析您的依赖关系并保留它们。