我想揭露一个仍处于书面状态的小场景,就DDD原理而言,要完成它有点繁琐。
比方说,我有一个用于托管帐户管理的应用程序。基本上,该应用程序包含多个有界上下文,例如Web帐户管理,Ftp帐户管理,邮件帐户管理...它们各自由自己的AR表示(它们可以独立存在)。
现在,让我们想象一下,我想为UI提供一种HTML表单,该表单为每个有界上下文组成一个字段集,例如,以更新限制和/或功能。我应该如何正确处理所有AR,而又不破坏每个请求的单个事务原理?我可以创建一种“外部” AR,比如说一个ClientHostingProperties AR,它可以保存对其他AR的引用,并使用自己的存储库将其作为单个事务的一部分进行更新吗?还是我应该更好地创建一个AR,该AR发出消息以让有限上下文提供的侦听器做出反应,在这种情况下,我可能应该考虑使用ES?
谢谢。
答案 0 :(得分:2)
我应该如何正确处理所有AR,而又不破坏每个请求原则的单个事务?
您可能正在寻找process manager。
基本草图:保留提交的表单中的详细信息本身就是一项交易(为您提供了积累业务价值的机会;第一步是捕获该机会)。
这为您提供一种跟踪此任务是否“完成”的方法:将任务中的更改与系统状态进行比较,然后发出命令(在隔离的事务中运行)进行更改
在我看来,过程最终看起来很像状态机。这些任务已完成,这些命令未完成,这些命令已失败:现在呢?并最终达到无需进行其他更改的状态,并且该过程的实例已“完成”。
答案 1 :(得分:1)
简短的回答:您不会。
集合是一个事务边界,这意味着,如果您要在一个“操作”中更新多个集合,则必须使用多个事务。总计等于一笔交易的原因是,这可以保证一致性。
这意味着您有两个选择:
希望这会有所帮助