【发布时间】:2015-06-24 13:36:23
【问题描述】:
根据Uncle Bob,实体层应该对数据库一无所知。
那么 JPA 注释呢?他们不违反作者提出的架构吗?如果有,如何将实体与 JPA 一起使用?
【问题讨论】:
标签: java jpa design-patterns architecture
根据Uncle Bob,实体层应该对数据库一无所知。
那么 JPA 注释呢?他们不违反作者提出的架构吗?如果有,如何将实体与 JPA 一起使用?
【问题讨论】:
标签: java jpa design-patterns architecture
在非 ORM 世界中,干净的架构将(或可能)涉及具有 DAO 接口,DAO 实现知道如何从数据库(或任何其他来源)检索数据,并将其转换为域并将其返回目的。然后上层将使用 DAO(通过接口)来检索这些对象。
这将允许您例如为不同的数据库创建不同的 DAO 实现,并且您可以更改数据库而无需打扰软件的其余部分。
在 JPA/ORM 世界中,如果您愿意,您可以绕过很多。您可以将实体类用作域对象,以与数据库无关的方式创建实体类(例如,不使用任何特定于数据库的NativeQueries)。现在您的实体与数据库无关,您可以在服务层中使用NamedQueries 而不是创建 DAO。
最后,您需要有一些了解数据库的层,但在 JPA 的情况下,它甚至不成立。您的实体是 Java 对象,它是 JPA 实现层负责将它们与数据库相互转换。
总结:软件开发中的普遍真理很少,您可以与十几个叔叔交谈并听到十几个版本的本质上相同的“故事”。
【讨论】: