Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JPA实体作为域模型是一种好的实践吗?_Jpa_Domain Driven Design - Fatal编程技术网

使用JPA实体作为域模型是一种好的实践吗?

使用JPA实体作为域模型是一种好的实践吗?,jpa,domain-driven-design,Jpa,Domain Driven Design,或者创建一个由域模型组成的域层,并与JPA实体对话以访问数据库? 这两种方法的优缺点是什么?谢谢 这确实取决于您如何编写域代码 通常(在Java中),我更喜欢创建一组单独的JPA注释DTO来处理持久性。此类DTO将与db表匹配,并将在 将向客户端公开一个语义API 将对此类DTO运行查询 将使用工厂初始化域对象以返回到客户端 这种方法使域模型与db模式真正解耦,这样您就可以独立地发展两者。这种方法的缺点是您有更多的代码要编写,但我发现这样的代码编写维护起来既简单又便宜 在实体上使用JPA注释

或者创建一个由域模型组成的域层,并与JPA实体对话以访问数据库?
这两种方法的优缺点是什么?谢谢

这确实取决于您如何编写域代码

通常(在Java中),我更喜欢创建一组单独的JPA注释DTO来处理持久性。此类DTO将与db表匹配,并将在

  • 将向客户端公开一个语义API
  • 将对此类DTO运行查询
  • 将使用工厂初始化域对象以返回到客户端
这种方法使域模型与db模式真正解耦,这样您就可以独立地发展两者。这种方法的缺点是您有更多的代码要编写,但我发现这样的代码编写维护起来既简单又便宜


在实体上使用JPA注释是一种非常常见的方法,但是随着域模型的发展和变得更加复杂,我自己的经验是,您必须面对比其他解决方案昂贵得多的问题。

您是否有使用该实现的公共项目?使用Hibernate作为JPA提供程序允许您以XML映射域对象。这可以帮助您保持域对象不受JPA注释的影响。这正是我所做的。有道理;)