【发布时间】:2021-10-26 12:32:45
【问题描述】:
我正在重构一个项目以使其更接近 DDD。该项目是用 VB.Net 编写的,并使用 WinForms 到 UI。一直在学习DDD,有些东西还不是很清楚。
我使用存储库模式和 SqlKata 来创建和执行 SQL 语句。我阅读了为什么应在应用程序服务中处理事务,但我认为在存储库中处理事务的某些情况可能是个好主意。一个例子:
具有列表属性 Lines 的域模型 Order。名为 FindOrderService 的服务。该服务使用 OrderRepository 及其函数 .FindById(...)。此存储库返回 Order 及其 Lines。在数据库中 Order 和 OrderLines 是两个不同的表。
I. 存储库函数不应该通过必须使用两个表来确保域对象以一致的状态创建来处理事务吗?使用函数 .Add(...) 不会发生同样的事情吗?
II. 应用程序服务可能会或可能不会以交易方式使用。但他们不知道有多少表用于持久化聚合。即使它也可以从应用程序服务中处理,难道不能确保这样的事情是基础设施的问题吗?
III. 从我读到的。似乎存在两个术语:“业务交易”和“技术交易”(在此post)。这是技术交易的例子吗?
提前致谢!
编辑:
我的问题,更具体地说,是:如果应用程序服务可以选择服务本身是否可以从数据库启动事务,如何从存储库(如果它们使用多个表)确保必须返回或持久化的领域模型是否一致?
我认为在this post 中已经更详细地讨论了这个问题。 This response 与我要找的很接近,但不清楚是否可以使用存储库中的数据库事务或如何正确处理。
【问题讨论】:
标签: transactions repository domain-driven-design repository-pattern sqlkata