将DAO注入构造函数是否被视为不良做法?如果是这样,为什么?

时间:2011-10-05 14:00:26

标签: java android data-access-layer dao

我有一个(DAL)数据访问层(但这个问题也适用于DAO),它与android中的一个安静的Web服务进行通信(除了我不想包含重量的事实之外,它不太相关宁静的图书馆,因为互动不是那么复杂。)

我有一个对象,它包含一个列表,该列表由来自此数据访问层的信息填充,当用户向下扫描并到达此列表的底部时,此对象从DAL中检索另一组信息。

我希望这个列表包装对象的调用类只需要调用列表包装对象而不是DAL(或DAO)。然后,我可以构造一个DAL并将其传递给这些列表包装对象的构造函数,然后调用类可以继续调用此列表包装对象,该对象可以处理新信息的重新存储。

那么,这听起来像是不好的做法还是只是一个非常糟糕的解释?

在域对象的构造函数中注入DAL和DAO是不是一个坏主意?

4 个答案:

答案 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应用,并且您正在滚动列表,那么SlowAdapterEfficientAdapter可能就是您要寻找的。

答案 3 :(得分:0)

如果我理解你正在实施的是分页。而你的解决方案就是我自己(并且已经)实现它的方式。

将DAL传递给构造函数本身并不错。最佳实践是使用Dependency Injection框架(Spring是一个突出的例子),以避免层之间的“硬编码”依赖。

但是既然你提到Android我怀疑使用这样的框架是一个好主意甚至可能。 (也许Android有某种DI内置?)

总结一下,您似乎已经考虑过您的应用程序架构。我不担心将参数传递给构造函数。