我读过从聚合根访问存储库被认为是不好的做法。
如果是这样,那么请考虑以下示例:

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/

10-08 23:16