.net 具有DDD和遗留数据的模块化整体

.net 具有DDD和遗留数据的模块化整体,.net,rest,architecture,domain-driven-design,legacy,.net,Rest,Architecture,Domain Driven Design,Legacy,在我的领域中,我有以下模块: 仓库管理 SalesOrder包含salesorderline等。。 这是一个多租户应用程序,这意味着数据库包含许多公司,每个公司都有自己的数据集。有很多积垢,但也有很大一部分是可操作的 有些数据来自遗留系统,您将如何在这里进行集成?将有一个集成运行一个时间间隔,并将数据发送到API,同步写入上行和下行。所以基本上我是在问如何将现有数据导入系统,这个问题不应该是分布式事务吗?也可能从其他系统导入数据。数据需要保持同步的原因是,遗留数据必须存在更长的时间 编辑: 假

在我的领域中,我有以下模块:

仓库管理 SalesOrder包含salesorderline等。。 这是一个多租户应用程序,这意味着数据库包含许多公司,每个公司都有自己的数据集。有很多积垢,但也有很大一部分是可操作的

有些数据来自遗留系统,您将如何在这里进行集成?将有一个集成运行一个时间间隔,并将数据发送到API,同步写入上行和下行。所以基本上我是在问如何将现有数据导入系统,这个问题不应该是分布式事务吗?也可能从其他系统导入数据。数据需要保持同步的原因是,遗留数据必须存在更长的时间

编辑:

假设两个模块都存储自己的产品版本: WMS.产品: -产品名称 -产品编号 -定量库存 销售订单。产品: -产品名称 -产品编号 -零售价 “集成”命令应类似于: Integration.Commands.SaveProduct -产品名称 -产品编号 -零售价 -定量库存 这个事务不应该分布在不同的模块中吗?如果交易是双向的,那么ID之间必须有某种联系。我建议如下:

您将如何在这里进行集成

您可以像集成域的任何其他外部部分(例如数据库)一样进行集成。创建一个连接器,其唯一任务是与该系统交互,并从您的域转换到该系统,反之亦然。您的域可以接触到的一个接口将屏蔽交互的细节,并在基础架构层实现

我问的是如何将现有数据导入到系统中…也可能有来自其他系统的数据导入

如果有一组类似的步骤用于从系统导入和导出数据,则可以创建一个接口,并创建一个连接器,该连接器为所有数据导入实现该接口

总之,将其视为一个外部系统,因为它是一个外部系统,并通过基础架构层对其进行读/写操作,就像数据库一样

编辑: 根据您的编辑

更干净的方法

您需要两个不同的命令。一个用于更新仓库,另一个用于更新销售订单

因此,您将使用Integration.Commands.PulledProduct和Integration.Commands.OrderProduct,而不是Integration.Commands.SaveProduct。当您销售产品时,您的域本身可能会触发由WareHouseManager模块处理的Pull product事件。您的外部触发器必须能够区分这些命令。 如果采用这种方法,您将看到集成几乎是合乎逻辑的


思考它的一种方式是使用无处不在的语言。SME可能会在用户输入销售订单事件1,然后我们从仓库提取请求的数量事件2时描述您的系统。因此,这两个事件在您的域中必须是可区分的。如果我还没有弄清楚,请告诉我。

嗨,路易斯,我编辑了这篇文章,你愿意看一下吗。谢谢您的时间。@Mojo看一下上面的更干净的方法