【发布时间】:2017-02-15 04:57:15
【问题描述】:
我读过从聚合根访问存储库被认为是不好的做法。 如果是,请考虑以下示例:
class User {
private String username;
public void changeUsername(String newUsrname) {
// How will I persist username to database if I don't have access to repository from aggregate root?
...
}
}
如果我无权访问存储库,我将如何将用户名保存到数据库 从聚合根?
我是这样看的:
class User {
private String username;
private UserRepository userRepository;
public User(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void changeUserName(String newUsername) {
this.username = newUserName;
userRepository.save(this);
}
}
或者我错过了 DDD 概念中的某些内容?
【问题讨论】:
-
您的示例显示 ActiveRecord 而不是 DDD。
-
@dit,您将如何以 DDD 方式实现这一目标?
-
检查这个 DDD 示例:github.com/citerus/dddsample-core
-
@dit,从您提供的示例中,我应该介绍 UserService,在该 userService 中我应该有 UserService.changeUserName(userId, username) 它将从存储库中获取用户,调用 user.changeUsername 并且服务将存储用户返回...所以与域的交互应该通过服务来完成?我的方法有什么问题?
-
Repository 有
getById、update(user)、delete(user)之类的方法,并且不执行任何逻辑,仅执行 CRUD 操作。逻辑将在 Service 中实现。
标签: java domain-driven-design ddd-repositories aggregateroot