c# – 如何证明DDD中聚合的一致性(技术上)?
作者:互联网
在使用DDD开发Web应用程序时,确保聚合的一致性非常重要.
我过去曾在一个Web应用程序(没有DDD)上工作,我们尝试使用Transactions确保数据的一致性.所以,我们使用了Serializable事务级别,这对我们的团队来说是一场噩梦,因为我们的应用程序的性能太差了我们的用户已经报告了很多死锁问题.
现在我正在开发一个实现DDD原则的Web应用程序,我需要确保聚合的一致性.
我在这里已经读过http://geekswithblogs.net/Optikal/archive/2013/04/07/152643.aspx,乐观并发/锁定是实现该方法的一种方法,它将一个版本或时间戳分配给我们的聚合来检查它.
我的第一个问题是如何使用C#和实体框架结合Sql Server实现乐观并发,包括从开始到结束的整个过程,以及存储该列/标志的位置,如果我们接受Eric Evans给出的顺序和行项目示例它在他的书中?
我的第二个问题是,在竞争条件下,用于确保总体一致性的常用策略是什么?
我将不胜感激任何代码段或引用.
解决方法:
My first question is how to achieve optimistic concurrency using C# and entity framework in conjunction with Sql Server including the whole process from the beginning to the end, and where to store that column/flag if we take order and line items example which Eric Evans gave it in his book?
如果使用单个表来存储整个Aggregate,则可以使用乐观锁定.例如,您可以使用JSON column to store行项目.对于这种情况,文档库NoSQL数据库是完美的选择.
如果你使用多个表(即一个表用于订单,一个表用于行项),那么我看不出你如何可靠地使用乐观锁来确保原子性.在这种情况下,您需要交易.
My second question is what are the common strategies used to ensure aggregates consistency in case of race conditions?
您只是retry the command.如果您将Aggregate设计为无副作用(至少不进行任何IO调用),那么这应该不是问题.
标签:c,entity-framework,domain-driven-design,consistency,aggregateroot 来源: https://codeday.me/bug/20190710/1426937.html