java - DDD : is accessing repository from aggregate root considered bad practice?

标签 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?
     ...
   }
}

如果我无权访问存储库,如何将用户名保留到数据库 来自聚合根?

我是这样看的:

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 概念中的某些内容?

最佳答案

How will I persist username to database if I don't have access to repository from aggregate root?

当前的实践通常在应用程序组件中处理 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 : is accessing repository from aggregate root considered bad practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39896123/

相关文章:

domain-driven-design - 实体可以访问存储库吗?

java - 为什么有两种不同的方式来创建内部类的实例?

node.js - Node : Node modules vs singleton classes

entity-framework - 使用 EF 4 和 DDD 的最佳方法是什么

c# - Greg Young 的 CQRS 实现中服务的目的

oop - 在进行领域驱动设计时如何正确利用值对象验证?

repository - DDD : Repository to read and Unit Of Work to write?

java - 去除特殊字符java

java - 线程 java - 可以重新初始化吗?

java - Jax-ws客户端: very slow initialisation