在使用DDD开发web应用程序时,确保聚合的一致性是非常重要的。
我过去在一个web应用程序上工作(没有DDD),我们试图使用Transactions.So来确保数据的一致性,我们使用了可序列化的事务级别,这对我们的团队来说是一场噩梦,因为我们的应用程序的性能太差了,我们的用户报告了很多死锁问题。
现在,我正在开发一个实现DDD原则的web应用程序,我需要确保聚合的一致性。
我在这里读到http://geekswithblogs.net/Optikal/archive/2013/04/07/152643.aspx,乐观并发/锁定是实现该抛出的方法之一,将版本或时间戳分配给我们的聚合以对其进行检查。
我的第一个问题是,如何结合Sql Server使用C#和实体框架来实现乐观并发,包括从头到尾的整个过程,以及如果我们采用Eric Evans在他的书中给出的订单和行项目示例,那么应该将列/标志存储在哪里?
我的第二个问题是,在竞争条件下,用于确保聚合一致性的常见策略是什么?
我将感谢任何代码片段或参考。
发布于 2017-09-26 10:17:20
我的第一个问题是,如何结合使用C#和实体框架以及Sql Server来实现乐观并发,包括从头到尾的整个过程,以及如果我们采用Eric Evans在他的书中给出的订单和行项目的例子,那么在哪里存储列/标志?
如果您使用单个表来存储整个聚合,则可以使用乐观锁定。例如,您可以对行项目使用JSON column to store。对于这种情况,基于文档的NoSQL数据库非常适合。
如果您使用多个表(例如,一个表用于订单,一个表用于行项目),那么我看不出您如何能够可靠地使用乐观锁定来确保原子性。在这种情况下,您需要事务。
我的第二个问题是,在竞争条件下,用来确保聚合一致性的常见策略是什么?
你只需要retry the command。如果您将聚合设计为无副作用(至少不进行任何IO调用),那么这应该不是问题。
https://stackoverflow.com/questions/46411649
复制相似问题