作者:华华eva3 | 来源:互联网 | 2023-01-27 17:13
目前我正在努力了解依赖注入.假设我有以下课程:
专辑
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
与Artist
和Album
依赖Artist
.假设我从数据库中获取所有必需的字段.目前,所有成员都通过构造函数传入.通常我会多次创建相同的专辑对象(在同一专辑的每首歌的循环中).这是依赖注入可以避免的吗?
我如何用Dagger2做到这一点?我真的不明白这一点.这只是"将构造函数"移出课堂吗?
1> David Medenj..:
如果你使用Dagger来创建你的模型类,你肯定做错了什么.
当然,理论上这是可能的.你仍然需要一个循环,但现在你将创建你的组件并传入参数,以便他们可以分别创建他们的Artist
,他们的Album
和他们的Song
.一个ArtistComponent
是它提供Artist
的AlbumComponent
,等等.
最后你仍然有一个循环,但这次只是创建组件来创建你需要的对象.你在这里获得的唯一的东西是很多开销和比以前更多的对象创建.所以不,请不要在这里使用Dagger.
依赖注入旨在将您的业务逻辑链接在一起.如果您有ArtistDao
从数据库中读取的内容,那么您可能还ArtistPresenter
需要使用DAO才能工作.ArtistDao仍然可以读取和创建艺术家(数据模型),但您可以使用Dagger创建DAO并将其传递给演示者.
这只是"将构造函数"移出课堂吗?
匕首不会神奇地创造物体.如果您有依赖项,您仍然在构造函数中声明该依赖项.Dagger将使用正确的参数为您调用构造函数,并可能将创建的对象保留在以后(范围).
依赖框架旨在减少样板,创建一个对象,将其传递给下一个对象,等等.它们将解析您的依赖关系,并保持它们.