DAO可以调用DAO吗?

时间:2012-01-24 14:12:20

标签: dao naming

我有需要为客户和客户地址更新数据库的组件(通过JDBC)。从CustomerDAO调用CustomerAddressDAO是否合适?或者创建一个单独调用它们的“CustomerDataManager”组件?

3 个答案:

答案 0 :(得分:27)

可以这样做,但这并不意味着你应该这样做。在这些情况下,我喜欢使用一个服务(在这种情况下为CustomerService),该服务具有使用两个DAO的方法调用。您可以围绕服务方法定义事务,因此如果一个调用失败,它们都会回滚。

调用其他DAO的DAO的问题是你很快就会得到循环引用。依赖注入变得更加困难。

答案 1 :(得分:4)

您可以从另一个DAO调用一个DAO,但也考虑在CustomerDAO中构建CustomerAddressDAO(毕竟,它是关于客户的,我认为您不希望没有客户的客户地址)。

答案 2 :(得分:4)

显然,你可以用不同的方式做到这一点。但是,要正确回答这个问题,你应该从你的模型开始。在模型中,查看Address是否是一个实体(具有自己的id并且也可以独立使用),或者它是一个值类型(只在Customer的上下文中才有意义。然后,您将有两种情况:< / p>

  1. 地址是一个实体: 在这种情况下,Address有自己的Dao,Customer有自己的Dao。 Dao都不应该访问另一个。如果有一些逻辑需要操纵这两个逻辑,则必须在您的应用程序逻辑中,而不是在数据访问层中。

  2. 地址是与客户关联的值类型: 在这种情况下,地址本身没有单独的DAO。它将作为包含Customer对象的一部分进行保存/恢复。

  3. 结论:如果设计得当,DAO不会互相访问(在标准情况下)。