DDD, Move to trash, 如何设计

DDD, Move to trash, how to design it

我有一个简单的用例,用户可以 discard 一个 profile。确实很容易理解,但是提出了一些建模问题。

1/ 在我的 profile 实体中有一个标志来表明他在垃圾箱中可以吗?

我不这么认为。所以我想要两个 ProfileRepositoryTrashRepository.

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