存储库 – 域驱动设计 – 存储库和聚合根
我有一个包含论坛的域模型.
我有论坛,帖子和帖子实体. 该论坛是一个独立的实体.即它不包含线程作为聚合的一部分.这是因为线程不归特定论坛所有(您可以将线程移动到其他论坛). 我不知道我是否应该将帖子建模为线程聚合的一部分.没有线程就不能存在帖子.删除一个帖子,你必须删除帖子,告诉我将帖子作为帖子聚合的一部分. 唯一的事情是,在编辑帖子时也可以单独获取帖子.即用它的id编辑帖子时. 所以我认为拥有一个帖子库对于这个目的是好的,而不是必须获取线程,然后通过线程实体上的方法获取正确的帖子. 拥有单独的帖子库的唯一方法是,在添加帖子时,即addPost(Post),您需要确保已将线程ID分配给帖子实体.使用聚合我想你会在线程实体上有addPost方法. 我应该考虑有限的背景吗?我可以拥有一个帖子实体和存储库,还有一个包含帖子实体的线程聚合吗? 如果我没有使用线程/帖子聚合,当删除线程时如何处理删除帖子?我应该创建一个调用线程存储库中的deleteThread(Thread)和post post repository上的deletePostsByThreadId(id)的服务吗? 这里有什么DDD方式? 解决方法
我想知道,如果在你的情况下DDD是个好主意.我的意思是论坛本质上是面向数据的.也许你应该考虑一种最简单的方法,只使用经典的面向数据的技术来查询你的数据. (即LINQ,Hibernate,纯SQL,实体框架或任何你想要的,取决于你的平台)
你的程序可能不需要域层,或者你最终会得到一个持有数据的ForumDTO类,以及持有业务逻辑的论坛,对于帖子或线程来说相同的东西,对我而言似乎是反模式. 你怎么看 ? 更新 我建议你阅读埃里克埃文斯的书,它有很好的复杂领域的例子,其中DDD非常适合. 对我来说,论坛几乎没有复杂的域逻辑,所以你最终会在数据层和域层之间建立1< - > 1映射,这就像我说的那样意味着重复和开销. 看到您的域的描述,您的方法似乎是面向数据的. 论坛似乎是成为聚合根的最佳类(它更直观) 如果您真的想使用DDD方法,可以在实体中注入存储库,并根据您的要求将域对象有意义的名称作为thread.GetLastPostOf(用户用户). 但是当你说你应该拥有一个带有GetPostById方法的存储库时,我同意你的看法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |