我有一个简单的用例,用户可以discard
profile
。这很容易理解,但提出了一些建模问题。
1 /我的profile
实体中有一个标志可以表明他在垃圾桶里吗?
我不这么认为。所以我希望有两个ProfileRepository
和TrashRepository
。
2 /所以给定这两个存储库,在我的应用程序服务中,我只需要从他的存储库中删除配置文件并将其添加到垃圾箱。似乎很自然,但如果我无法进行交易,可能会造成麻烦。 (但我的应用程序并非如此)。
但是,我使用关系数据库,第一个想法是使用列来指示行是否在垃圾桶中,并使两个存储库在同一个表上工作。我不确定这是个好主意。
我还可以向discard
添加ProfileRepository
方法,以便我不需要这两种方法。
哪种解决方案最好? 我可以设置一个标志来确定我的实体中的状态(丢弃),还是让两个不同的实体拥有不同的存储库更好?
答案 0 :(得分:4)
Discard确实是一个业务命令,命令总是会改变域的状态。我相信,如果状态指示该配置文件已被丢弃,则完全有效。如果你真正想要的是discarded
,那么引入deleted
or active
这样的属性是错误的。
然而,有些人认为有时候明确地模拟状态是有用的:有一个完全不同的类来表示丢弃的配置文件。
这里有一些与显式状态建模相关的链接:
http://codebetter.com/gregyoung/2010/03/09/state-pattern-misuse/ http://p2p.wrox.com/book-patterns-principles-practices-domain-driven-design/94718-ch16-explicit-state-modeling-identity-map.html https://medium.com/@martinezdelariva/explicit-state-modeling-f6e534c33508