我读过从聚合根访问存储库被认为是不好的做法。
如果是这样,那么请考虑以下示例:
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概念?
最佳答案
如果无法从聚合根访问存储库,如何将用户名保留在数据库中?
当前的实践通常在应用程序组件而不是域模型中处理I / O。
Application {
void when(ChangeUserName command) {
User user = this.userRepository.getUserById(command.userId);
user.changeName(command.name);
this.userRepository.save(user);
}
}
推荐阅读:Vladimir Khorikov关于域模型隔离。
关于java - DDD:从聚合根访问存储库是否被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39896123/