Tei*_*raz 0 java domain-driven-design ddd-repositories aggregateroot
我已经读过从聚合根访问存储库被认为是不好的做法.如果是,请考虑以下示例:
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?
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我无法从聚合根访问存储库,我将如何将用户名持久保存到数据库?
我这样看:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
或者我错过了DDD概念中的一些东西?
如果我无法从聚合根访问存储库,我将如何将用户名持久保存到数据库?
当前的实践通常处理应用程序组件中的I/O,而不是域模型中的I/O.
Application {
void when(ChangeUserName command) {
User user = this.userRepository.getUserById(command.userId);
user.changeName(command.name);
this.userRepository.save(user);
}
}
Run Code Online (Sandbox Code Playgroud)
推荐阅读:Vladimir Khorikov关于域模型隔离.
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |