我正在设计项目结构,遵循DDD artchitecture& C#技术。 我面临一个日期DTO映射到域模型的问题,并将出日期数据持久化到数据库。
我有2个分布式客户端(桌面)获取学生ID = 1
的数据服务器返回DTO for Student的ID = 1,其中包含以下信息:客户端1& 2那样: 学生:
客户1获取DTO并将此学生的电话号码更新为:56789 并允许保存操作 ---> 数据库已将新手机值保持为56789.
客户端2获取DTO并将此学生的全名更新为:Peter 并允许保存操作 ---> 数据库已经使用了新的全名:Peter和旧电话号码:01234(不期望的行为)
根本原因: - 执行保存操作时,客户端将修改后的DTO返回到服务器并映射到域模型。 DTO保留旧值(电话号码:01234)并将此值映射到域模型。
请您告诉我一种方法,模式或技术来防止这个问题?这一点非常重要,因为应用程序可以让多个人同时修改相同的应用程序模型。
非常感谢
答案 0 :(得分:0)
它被称为并发问题。有很多方法可以解决它。例如,SQL Server或Oracle等RDMS产品具有内置的并发处理功能,可以提供帮助(检查数据库供应商的文档)。首先研究并使用它们,然后添加您喜欢的程序化方法。我已经在我支持的一些应用程序中看到了以下内容,每个应用程序都有自己的问题,因此您必须测试最适合您的应用程序以及用户操作方式的应用程序。
还有很多其他方法,每种方式都有自己的问题。它们可以简单到复杂。例如,命名模式可以包括OCC,事件源和消息传递。无论如何,假设至少有一个请求可以赢得“先到先得”,并且所有其他请求都会得到相应的反应。
希望这有帮助!