DDD,域实体/ VO和JPA

时间:2015-07-14 07:34:40

标签: java spring jpa domain-driven-design spring-data-jpa

我从DDD开始,你可以想象我的大脑正在沸腾。

我的问题与我的域对象(实体,VO,...)有关,它代表我的域概念/逻辑以及如何持久/检索它们。

蓝皮书说,存储库是一种表示域对象集合的方式,负责与基础架构层进行通信。我在一些文章中也读到了infrastructura层,你必须使用hibernate,JPA或其他任何东西。

然后我看到这个Spring-data-jpa示例http://spring.io/guides/gs/accessing-data-jpa/,我变得疯狂。

口号说Spring-data-jpa是轻松创建存储库,之前的示例似乎将JPA注释合并到域对象(customer)。

样品是对的吗?或者我是对的吗?

如果我是对的,域和基础设施必须分开,这意味着要存储我必须拥有的客户:

  • 我的域层中的Customer类(代表客户并具有所有逻辑操作)
  • CustomerRepository我的域层(从基础架构层检索或存储客户)
  • 基础架构层中的Customer类,可能使用@Entity
  • 进行注释
  • 了解如何从数据库中存储/检索客户的一些CustomerReposityJPA

感谢您的任何澄清。

1 个答案:

答案 0 :(得分:2)

我无法看到您发布的链接,我从未将域驱动设计应用于Java世界。 从理论上讲,您需要的是Customer在域层中的聚合。在您的域图层中,存储库的空间(用作界面),因此您将拥有ICustomerRepository。 可能你会有四个原型来解决常见的持久性问题:

GetById(CustomerId id);
Add(Customer c);
Delete(Customer c);
Update(Customer c);

在基础设施层中,您将提供正文(例如CustomerRepository),在infrastracture层中,您可以将自己与技术(例如JPA)结合起来。

域层必须完全不知道基础架构中使用的技术。这样做你可以完全改变实现细节(几乎没有麻烦)。