4

在每个聚合内部,必须保证一致性。在存储库中很容易做到这一点,因为我总是可以使用数据库或框架中的事务。我对存储库之外发生的事情表示怀疑。一项服务可能需要使用多个聚合来处理请求。在服务中的处理过程中或聚合持续存在时可能会出现问题。

如果在服务处理过程中出现问题,我可以引发异常。这样操作将是原子的。这是我的第一个担忧。这是一个好习惯吗?我看到的问题是很难从中恢复过来。没有简单的方法可以让所有聚合保持失败操作之前的状态。

我遇到的另一个问题是,如果其中一个聚合无法持久化,会发生什么。如何保证信息的一致性?我必须在存储库之外使用数据库事务吗?我在想它可能不是最好的解决方案,因为我在设计域模型时不应该考虑数据库。

4

1 回答 1

3

工作单元模式提供了解决方案 - http://martinfowler.com/eaaCatalog/unitOfWork.html

您可以根据需要将任意数量的聚合根操作封装到单个 UOW 中。然后,工作单元的具体实现可以包含其自己的提交和回滚逻辑,特定于所涉及的持久性方法和技术。例如,如果您在 .NET 中工作,则处理TransactionScope对象 ( http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx )。

这是一篇关于如何实现基本 UOW 模式的不错的文章 - http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

于 2012-07-25T20:24:21.010 回答