DDD, Move to trash, 如何设计
DDD, Move to trash, how to design it
我有一个简单的用例,用户可以 discard
一个 profile
。确实很容易理解,但是提出了一些建模问题。
1/ 在我的 profile
实体中有一个标志来表明他在垃圾箱中可以吗?
我不这么认为。所以我想要两个 ProfileRepository
和 TrashRepository
.
2/ 因此,鉴于这两个存储库,在我的应用程序服务中,我只需从他的存储库中删除配置文件并将其添加到垃圾箱。看起来很自然,但如果我无法进行交易,可能会造成麻烦。 (但在我的应用程序中并非如此)。
但是,我使用的是关系数据库,第一个想法是使用一个列来指示该行是否在垃圾箱中,并让两个存储库在同一个 table 上工作。我不确定这是个好主意。
我还可以向 ProfileRepository
添加一个 discard
方法,这样我就不需要这两个了。
哪个是最好的解决方案?
我可以设置一个标志来确定我的实体中的状态(已丢弃),还是让两个不同的实体具有不同的存储库更好?
丢弃确实是一个业务命令,一个命令总是会改变域的状态。我相信拥有表明配置文件已被丢弃的状态是完全有效的。错误的是引入 属性,例如 deleted
or active
,而您真正的意思是 discarded
.
但是,有些人认为有时明确地对状态建模很有用:使用完全不同的 class 来表示丢弃的配置文件。
这里有一些与显式状态建模相关的链接:
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
我有一个简单的用例,用户可以 discard
一个 profile
。确实很容易理解,但是提出了一些建模问题。
1/ 在我的 profile
实体中有一个标志来表明他在垃圾箱中可以吗?
我不这么认为。所以我想要两个 ProfileRepository
和 TrashRepository
.
2/ 因此,鉴于这两个存储库,在我的应用程序服务中,我只需从他的存储库中删除配置文件并将其添加到垃圾箱。看起来很自然,但如果我无法进行交易,可能会造成麻烦。 (但在我的应用程序中并非如此)。
但是,我使用的是关系数据库,第一个想法是使用一个列来指示该行是否在垃圾箱中,并让两个存储库在同一个 table 上工作。我不确定这是个好主意。
我还可以向 ProfileRepository
添加一个 discard
方法,这样我就不需要这两个了。
哪个是最好的解决方案? 我可以设置一个标志来确定我的实体中的状态(已丢弃),还是让两个不同的实体具有不同的存储库更好?
丢弃确实是一个业务命令,一个命令总是会改变域的状态。我相信拥有表明配置文件已被丢弃的状态是完全有效的。错误的是引入 属性,例如 deleted
or active
,而您真正的意思是 discarded
.
但是,有些人认为有时明确地对状态建模很有用:使用完全不同的 class 来表示丢弃的配置文件。
这里有一些与显式状态建模相关的链接:
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