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