5

我正在尝试重写一堆 DAO,这里是设置:

  • 只有普通的 JDBC(没有 JPA、ORM)
  • 没有使用接口
  • 在插入对象之前进行大量检查
  • 业务对象是强链接的

我的主要问题是:如何持久化/检索由多个其他对象组成的业务对象?例如,我的 CustomerDAO 是否知道 AddressDAO 并从那里检索客户地址?

4

3 回答 3

1

只有普通的 JDBC(没有 JPA、ORM) 业务对象是强链接的

不确定为什么在希望链接业务对象时不想使用 JPA,但至少您应该使用 Spring JDBC 模板,它可以让您从一些样板代码中解脱出来。

关于其他约束,我会这样做:

  1. 我仍然会使用接口来定义DAO方法并在支持的 Spring JDBC 模板中实现它们DAOImpl。到处使用 DAO 并注入 DAOImpl。
  2. 我的 DAO 将简单地一对一映射到基础表,每个 DAO 都不知道其他 DAO 的存在。
  3. 我的 Manager 层将具有运行验证检查并准备需要持久化的对象集、调用适当的 DAO 和适当的方法 (CREATE/UPDATE/DELETE) 来持久化对象的所有业务逻辑。
  4. 同样,管理器层将遵循基于接口的实现,而视图层将具有注入 ManagerImpls 的管理器类型。

我的两分钱!

于 2012-09-09T13:03:52.693 回答
0

您可以考虑使用JOOQ。它不是 JPA,但它可以很容易地用作替代解决方案。它足够轻巧。它还提供了一个逆向工程工具,用于将您的数据库实体构建为 DAO 对象。

我已将 JOOQ 嵌入到应用程序经过精心设计的相关情况中。我没有使用它的 DAO 功能,而是将其用作更高层以避免与 JDBC 层混淆。

干杯!

于 2012-09-09T13:51:26.677 回答
0

复合实体是 DAO 之上的一层。如果要移除所有耦合,DAO 持久化的域对象应该是扁平的,没有关系。请参阅核心 J2EE 模式 CompositeEntity。

此外,最好不要通过将查找器放在另一个中来在 DAO 之间引入耦合。例如:

AddressDAO.findForCustomerId(id);

不如使用第三个 DAO 来管理关系。IE:

CustomerAddressRelDAO.findAddressForCustomer(id);

如果您使用关系 DAO,则地址和客户都不会相互依赖(或了解)彼此。

于 2016-01-15T23:13:13.813 回答