必须保证每个聚合内部的一致性。在存储库中执行此操作很容易,因为我始终可以使用数据库或框架中的事务。我对存储库之外发生的事情表示怀疑。一项服务可能需要使用多个聚合来处理请求。在服务处理过程中或在保留聚合时可能会出现问题。
如果服务处理过程中出现问题,我可以提出异常。这样操作将是原子的。这是我首先关心的问题。这是一个好的做法吗?我看到的问题是很难从中恢复。没有简单的方法可以让所有聚合保持操作失败之前的状态。
我遇到的另一个问题是如果其中一个聚合无法持久保存会发生什么。如何保证信息的一致性?我是否必须在存储库之外使用数据库事务?我认为这可能不是最好的解决方案,因为在设计领域模型时我不应该在数据库中思考。
工作单元模式提供了解决方案 -http://martinfowler.com/eaaCatalog/unitOfWork.html http://martinfowler.com/eaaCatalog/unitOfWork.html
您可以根据需要将任意数量的聚合根操作封装到单个 UOW 中。然后,工作单元具体实现可以包含其自己的提交和回滚逻辑,特定于所涉及的持久性方法和技术。例如,您处理的是TransactionScope
目的 (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx)如果您在 .NET 中工作。
这是一篇关于如何实现基本 UOW 模式的不错的文章 -http://msdn.microsoft.com/en-us/magazine/dd882510.aspx http://msdn.microsoft.com/en-us/magazine/dd882510.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)