DAO可以调用DAO吗?

Jac*_*ble 14 naming dao

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

hvg*_*des 27

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

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


Naz*_*rza 5

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

  1. 地址是一个实体:在这种情况下,地址有自己的道,客户有自己的道。两个道都不应该访问另一个。如果有一些逻辑需要操作这两者,那么它必须在您的应用程序逻辑中,而不是在数据访问层中。

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

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

  • “如果有一些逻辑需要操纵两者,那么它必须位于应用程序逻辑中,而不是数据访问层中。” ——如果需要交易怎么办?(例如,我需要确保客户和地址都被删除) (2认同)