Java 对复合对象使用DAO

Java 对复合对象使用DAO,java,database,design-patterns,Java,Database,Design Patterns,我试图重写一堆DAO,设置如下: 只有普通JDBC(没有JPA、ORM) 没有使用接口 在插入对象之前进行大量检查 业务对象是紧密关联的 我的主要问题是: 如何持久化/检索由多个其他对象组成的业务对象? e、 我的客户DAO是否知道地址DAO并从那里检索csutomers地址 只有普通JDBC(没有JPA、ORM) 业务对象是紧密关联的 不知道为什么在希望业务对象被链接时不想使用JPA,但至少应该使用SpringJDBC模板,这样可以使您从一些样板代码中解脱出来 关于其他限制,我将按以下方式

我试图重写一堆DAO,设置如下:

  • 只有普通JDBC(没有JPA、ORM)
  • 没有使用接口
  • 在插入对象之前进行大量检查
  • 业务对象是紧密关联的
我的主要问题是: 如何持久化/检索由多个其他对象组成的业务对象? e、 我的客户DAO是否知道地址DAO并从那里检索csutomers地址

只有普通JDBC(没有JPA、ORM) 业务对象是紧密关联的

不知道为什么在希望业务对象被链接时不想使用JPA,但至少应该使用SpringJDBC模板,这样可以使您从一些样板代码中解脱出来

关于其他限制,我将按以下方式进行:

  • 我仍然会使用接口来定义
    DAO
    方法,并在支持
    DAOImpl
    的SpringJDBC模板中实现它们。到处使用DAO并注入DAOImpl
  • 我的DAO只是到底层表的一对一映射,每个DAO都不知道其他DAO的存在
  • 我的管理层将拥有运行验证检查和准备需要持久化的对象集的所有业务逻辑,调用适当的DAO和适当的方法(创建/更新/删除)来持久化对象
  • 同样,管理器层将遵循基于接口的实现,视图层将使用ManagerImpl注入管理器类型
  • 我的两分钱 我将JOOQ嵌入到一个相关的环境中,应用程序是经过精心设计的。我没有使用它的DAO功能,而是将其用作更高的层,以避免与JDBC层混淆


    干杯

    复合实体是DAO上的一层。如果要删除所有耦合,DAO保留的域对象应该是平坦的,没有关系。请参阅核心J2EE模式组合

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

    AddressDAO.findForCustomerId(id)

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

    CustomerAddressRelDAO.findAddressForCustomer(id)


    如果您使用关系DAO,则地址和客户都不会相互依赖(或意识到)。

    谢谢!我想到了JPA。到目前为止,反对的理由是,这个应用程序并没有经过严格的设计,我也不确定在JPA上如何工作。(这个东西甚至不在应用服务器中运行!)。但是,如果我理解正确,第2-4点基本上意味着我编写了自己的entityManager,对吗?没错,如果您使用JPA规范定义实体及其关联并雇用JPA提供商,您的管理层将了解不同域对象(如客户、地址)之间的关联(像Hibernate一样),他们会负责持久化对象层次结构,您可以将精力集中在数据传输对象->域对象转换上