Orm 实体能否访问存储库?
假设我有两个简单的实体:User和Review。如果用户调用审阅存储库,情况有多糟?用户获得评论的“干净”方式是什么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
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)那样做;您的用户对象将同步(在本地环境中)。