根据Bob叔叔

时间:2015-06-23 10:51:41

标签: java jpa design-patterns architecture

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

那么JPA注释呢?他们不违反作者提出的架构吗?如果他们这样做,如何使用JPA实体?

1 个答案:

答案 0 :(得分:1)

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

这将允许您为不同的数据库创建不同的DAO实现,并且您可以在不打扰其余软件的情况下更改数据库。

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

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

总之:软件开发中几乎没有普遍的真理,你可以和十几个叔叔交谈,听几十个版本基本相同的“故事”。