c# - 在 DDD 聚合中保持“当前余额”
问题描述
在库存系统上工作。
使用 C# 和实体框架。
一个StockItem将有许多StockMovement。 StockMovement可以是购买、销售、退货、浪费等。
因此,一个StockItem有一个StockLevel。
为StockItem维护StockLevel的最佳方法是什么?
一种方法是在查询 StockItem 时对所有StockMovements进行求和,但如果StockMovements的数量变得过多,则在StockItem上维护一个StockLevel并在每次添加 StockMovement 时对其进行调整似乎更好。
但是,如果两个单独的客户端同时处理StockMovement,则可能同时实现StockItem的两个实例(即都显示 100 个单位的余额)。
客户端 1 删除了 10 个单位,客户端 2 也删除了 10 个单位,但是在更新StockLevel时,两个StockItem实例都会将新的StockLevel调整为 90,这是错误的。应该是80。
因此,使用乐观并发似乎是一种选择,但我不想将其推回给用户。
应用程序层捕获并发异常然后代表客户端重试是否有意义,或者我应该采用什么更好的模式?
解决方案
推荐阅读
- python - 来自变量的字典内的路径
- python - 为什么我在尝试从 NSRDB API 获取数据时收到 400 错误
- spring-boot - Spring boot 2.4.5 security + devtools + vaadin 嵌入式tomcat无法反序列化会话属性
- mariadb - 在 Debian 10 上配置和调整 MariaDB
- google-cloud-platform - GCP VM 未正确安装 nVidia 驱动程序
- php - 提供一个在 Windows 中可执行的客户端工作 PHP 文件,该文件还输出目录和文件
- node.js - mongoose Schema 的变化没有反映
- swiftui - 如何在 SwiftUI 中为 TabItem 标签添加高亮显示
- python - 从 Snowball 边缘优化中提取对象
- java - 使用spring webflux第一次调用的结果进行多个异步调用