我正在对一个档案进行建模,它是视频点播系统的一部分。将存档想象成 Windows 资源管理器,其中多个用户可以创建文件夹、上传视频、重组文件夹等。有业务规则(权限)确定是否允许用户执行任务(即重命名文件夹、移动文件夹、查看文件夹等) )。
我已将每个文件夹建模为聚合根,并将一个文件夹移动到另一个文件夹似乎会影响两个聚合根。
据我了解,我应该发送一个事件来修改其他聚合。然而,我担心的是,如果第二个文件夹也被修改(比如从系统中删除或删除),那么我需要发送一个补偿命令来撤消第一个聚合更改。
我更喜欢某种交易来一起处理移动(两个聚合上的更改),如果它失败,那么至少我不需要撤消移动的第一部分或引发事件的第一部分。
这让我想到,CQRS 适合我想要解决的问题吗?如果是这样,我的聚合是否可能是错误的?
在 DDD 中,聚合应该代表事务边界。需要涉及多个聚合的事务通常表明应该改进模型,或者应该审查事务要求,或者两者兼而有之。
这是一个纯粹的 DDD 问题,独立于 CQRS 或任何其他架构模式。
另一方面,您真的需要重新发明分层结构(例如包含文件的文件夹)吗?据我所知,这个问题已经解决了相当长一段时间了。也许再次正式化该特定领域并没有固有的优势。
使用 DDD 模式进行领域建模在有界上下文中最有意义,其中 (1) 领域非常复杂,(2) 领域建模将为您的软件提供相对于类似应用程序的真正(例如竞争)优势。如果特定的有界上下文相当简单和/或重构它并没有带来真正的巨大优势,那么您最好使用最简单的解决方案。
恕我直言,这代表了领域驱动设计中最重要的概念,即聚焦核心领域
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)