architecture – DDD – 每个实体的存储库还是一个存储库?

首先,可能没有正确答案,但我确信有些人比我更了解并且能够提供帮助.

我有3个实体:用户,博客,帖子.

系统可以包含任意数量用户.

用户可以拥有任意数量博客,但每个博客只有一个用户.

博客可以拥有与用户发布的帖子一样多的帖子,所有帖子都来自拥有博客的同一用户(即如果John拥有博客Food,只有John可以在此博客中发布).当然,每个帖子都有一个父级博客.

然后我有用户个人资料页面,我想要显示所有用户详细信息,他所有博客名称,以及最近5个帖子.

然后我有一个博客页面,显示博客的详细信息,所有者的名称(用户)和所有帖子的标题.

然后我有一个帖子页面,显示帖子详细信息,博客名称和所有者名称.

如你所见,我在所有人之间都有关系,但他们都不能作为聚合.

代码中定义实体并不困难,我所遇到的问题是定义存储库.我需要多少钱? 3 – 每个实体一个? 1 – 什么都有?我该如何进行查找?

例如,获取用户页面中的最后5个帖子.用户没有引用帖子,而是拥有博客容器,其中每个博客依次拥有帖子的容器.我的存储库中是否应该有一个接受UserID并返回帖子列表的方法?或者它应该是一个服务?另外,我通常不会执行所有数据的加载,而是延迟加载.通过检索现有的用户实体,除非需要(首次访问时),否则我不会加载其博客.

提前致谢.

我会创建:

>用于处理帖子和评论的PostRepository
> BlogRepository主要用于搜索
> UserRepository

如果您不打算支持评论,我会删除帖子库并处理BlogRepository中的帖子

我通常在使用它们之后对存储库进行建模,并避免聚合嵌套(超过两个级别).

For example to get the 5 last posts in the user page. User does not have reference to Posts,instead in holds a container of Blogs where each Blog in turn holds container of Posts.

imho用户不应该有博客的容器.您有存储库来获取它.

Should I have a method in my repository that accepts the UserID and returns a list of Posts?

是.

Or maybe it should be a Service?

服务用于从使用域模型的代码删除业务逻辑.在得到那种逻辑之前不要创建它们.

Also I don’t usually perform loading of all the data but instead I have lazy loading. By retrieving an existing User entity,I would not load its blogs unless they are needed (when first time accessed).

通过不具有将所有域模型链接在一起的属性,可以避免延迟加载.尝试仅具有子聚合的属性.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...