Orm 实体能否访问存储库?

Orm 实体能否访问存储库?,orm,repository,entity,repository-pattern,ddd-repositories,Orm,Repository,Entity,Repository Pattern,Ddd Repositories,假设我有两个简单的实体:User和Review。如果用户调用审阅存储库,情况有多糟?用户获得评论的“干净”方式是什么 class User { public function getReviews() { return reviewRepository.findByUser(this); } } 我确实看了一下,但尽管他们说这是一种不好的做法,但我在那里没有找到答案。DDD中的干净方法是让用户存储库在请求用户时填写用户的评论 class UserRepo

假设我有两个简单的实体:User和Review。如果用户调用审阅存储库,情况有多糟?用户获得评论的“干净”方式是什么

class User
{
    public function getReviews()
    {
        return reviewRepository.findByUser(this);
    }
}

我确实看了一下,但尽管他们说这是一种不好的做法,但我在那里没有找到答案。

DDD中的干净方法是让用户存储库在请求用户时填写用户的评论

class UserRepository
{
  public User GetUserByID(long userId)
  {
    var user = CreateUser();
    user.Reviews = FindReviewsforUser(userID);
    return user;
  }
}

但在执行此操作之前,您需要验证域中的用户实体也是AggregateRoot!只有AggregateRoot具有存储库。在设计AggregateRoot时,请查看或了解一些问题。

这里是另一个有用的聚合链接:是的,User和Review都是聚合根。我喜欢你的解决方案,但困扰我的是:因为当用户被实例化时,
FindReviewsforUser()
只被调用一次,如果我们为该用户添加一个新的评论会发生什么
User.Reviews
将过时,而如果我们再次调用存储库,它将是最新的。我遗漏了什么吗?你永远不会得到完全同步。至少不是在n层体系结构中!如果你想像user.AddReview(review)那样做;您的用户对象将同步(在本地环境中)。