【发布时间】:2017-07-19 17:02:13
【问题描述】:
我正在开发一个 spring 应用程序,与大多数其他 spring 应用程序一样,我有三层。前面是 Rest Controller,中间是 Services,后面是 JPA 存储库。现在我们有映射到数据库的spring实体,在我的例子中,它们是普通的旧java对象(POJO),只有一些我通常喜欢并且不想在其中放置任何业务逻辑的字段和getter和setter。但是,在这个项目中,我发现在很多服务中我都在重复相同的代码,类似这样的代码
User user=userRepository.findUserByName("some name here");
if(user==null){
throw new UserNotFoundException("User not found");
}
现在,这不仅适用于单个实体,还有许多其他类似的重复部分。因此,我开始担心它并寻找可能的区域来推送该代码并消除重复的部分。如领域驱动设计中所述,有一件事情是有意义的,将业务逻辑放在实体中,现在它们将同时拥有数据和部分业务逻辑。这是一种常见的做法吗?
【问题讨论】:
-
这个问题太笼统了,你基本上是在问应用DDD的优缺点。
-
是的,这太面包了。我将缩小范围,将部分业务逻辑放在实体类中,同时将大部分业务逻辑保留在服务中,这是一种常见的做法吗?
-
一般来说,您将写入/更新的逻辑放在实体中,将查找的逻辑放在存储库中。在
CQRS中,这是非常明确的(根据定义)。
标签: java spring spring-mvc spring-data-jpa domain-driven-design