我有一个(DAL)数据访问层(但这个问题也适用于DAO),它与android中的一个安静的Web服务进行通信(除了我不想包含重量的事实之外,它不太相关宁静的图书馆,因为互动不是那么复杂。)
我有一个对象,它包含一个列表,该列表由来自此数据访问层的信息填充,当用户向下扫描并到达此列表的底部时,此对象从DAL中检索另一组信息。
我希望这个列表包装对象的调用类只需要调用列表包装对象而不是DAL(或DAO)。然后,我可以构造一个DAL并将其传递给这些列表包装对象的构造函数,然后调用类可以继续调用此列表包装对象,该对象可以处理新信息的重新存储。
那么,这听起来像是不好的做法还是只是一个非常糟糕的解释?
在域对象的构造函数中注入DAL和DAO是不是一个坏主意?
答案 0 :(得分:2)
答案取决于你是否强烈关注“贫血领域模型”以及将面向对象与函数式编程相结合。
一个问题是你将以这种方式创建循环依赖:模型和持久性包必须彼此了解。如果您使用更具功能性的样式,并且不提供对模型对象的DAO引用,那么它就是单向关系。
我不太喜欢你的设计。我担心它太耦合了。我不会混淆功能风格。
答案 1 :(得分:1)
Domain Objects
通常是没有任何实际逻辑的数据载体。因此,我认为将它与您的DAO
逻辑紧密结合是不好的设计。一般逻辑可能类似于:
public class DataService {
private DAO dao;
}
public class UserService {
private DataService svc;
public DomainObject createDomainObject() {
return new DomainObject(dao.getData());
}
}
答案 2 :(得分:1)
你在那里引入了一个循环依赖,所以它不是最好的设计。
如果您正在开发Android应用,并且您正在滚动列表,那么SlowAdapter和EfficientAdapter可能就是您要寻找的。
答案 3 :(得分:0)
如果我理解你正在实施的是分页。而你的解决方案就是我自己(并且已经)实现它的方式。
将DAL传递给构造函数本身并不错。最佳实践是使用Dependency Injection框架(Spring是一个突出的例子),以避免层之间的“硬编码”依赖。
但是既然你提到Android我怀疑使用这样的框架是一个好主意甚至可能。 (也许Android有某种DI内置?)
总结一下,您似乎已经考虑过您的应用程序架构。我不担心将参数传递给构造函数。