【问题标题】:JPA annotations in entity layer according to Uncle Bob根据鲍勃叔叔,实体层中的 JPA 注释
【发布时间】:2015-06-24 13:36:23
【问题描述】:

根据Uncle Bob,实体层应该对数据库一无所知。

那么 JPA 注释呢?他们不违反作者提出的架构吗?如果有,如何将实体与 JPA 一起使用?

【问题讨论】:

    标签: java jpa design-patterns architecture


    【解决方案1】:

    在非 ORM 世界中,干净的架构将(或可能)涉及具有 DAO 接口,DAO 实现知道如何从数据库(或任何其他来源)检索数据,并将其转换为域并将其返回目的。然后上层将使用 DAO(通过接口)来检索这些对象。

    这将允许您例如为不同的数据库创建不同的 DAO 实现,并且您可以更改数据库而无需打扰软件的其余部分。

    在 JPA/ORM 世界中,如果您愿意,您可以绕过很多。您可以将实体类用作域对象,以与数据库无关的方式创建实体类(例如,不使用任何特定于数据库的NativeQueries)。现在您的实体与数据库无关,您可以在服务层中使用NamedQueries 而不是创建 DAO。

    最后,您需要有一些了解数据库的层,但在 JPA 的情况下,它甚至不成立。您的实体是 Java 对象,它是 JPA 实现层负责将它们与数据库相互转换。

    总结:软件开发中的普遍真理很少,您可以与十几个叔叔交谈并听到十几个版本的本质上相同的“故事”。

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多