编程语言
首页 > 编程语言> > java-Spring Data和DDD-与持久性无关的域模型

java-Spring Data和DDD-与持久性无关的域模型

作者:互联网

您好,具有与持久性无关的单独的持久性模型和域模型是一种常见的模式.我想了解如何在Spring Data中解决此模式.

我想像的方式是,如果我们使用没有Spring数据的常规休眠,那么我们将拥有可以与域对象一起工作的存储库,这些对象将在内部映射到ORM模型,然后将触发持久性.

如何使用Spring Data来实现这一目标,如果无法实现,则可以使用哪种替代机制以使我们拥有与持久性无关的Domain模型?谢谢.

解决方法:

Spring Data为您提供了95%的解决方案,但确实有所妥协.

Spring Data提供的存储库与基础持久性技术无关.您可以知道,因为它们包含在Spring Data Commons中,所以所有其他模块都建立在基础模块之上.一个例子是CrudRepository.因此涵盖了基本的粗粒操作.

同样,查询派生不会泄漏有关持久性存储的信息.

由于您要做的就是指定这些接口,因此您几乎可以得到所需的接口,因为Spring Data正在创建实际的实现.

但是对此有局限性.

>您的实体通常需要注释.这些取决于存储.许多人认为这是可以接受的折衷方案,因为注释实际上并不包含依赖于商店的代码,他们只是说“嘿,如果您碰巧以以下方式将其与地图一起使用…”.
>通常通过将@Query批注放在存储库方法上来实现更复杂的查询.这些是持久性存储相关的.如果您不喜欢它,则总是可以在单独的类中提供自定义实现,而使接口持久性技术不再可知.
>使用某些技术(例如JPA),由于延迟加载和脏检查,特定存储行为会通过其工作方式泄漏到您的应用程序中.

如果您想100%地存储不可知论者,我想除了滚动自己的持久性之外别无选择,可能是通过将域模型复制到传输对象中并使用Spring Data持久化那些对象.

但这为开发人员以及运行时的JVM带来了很多工作,带来了一些人为的好处.

标签:spring-data-jpa,domain-driven-design,spring-data,spring,java
来源: https://codeday.me/bug/20191110/2014814.html