具有DDD和旧版数据的模块化整体式设备

如何解决具有DDD和旧版数据的模块化整体式设备

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

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

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

编辑:

Let's say both modules stores it's own version of product:

WMS.Product:
- ProductName
- ProductNumber
- QuantityInStock

SalesOrder.Product:
- ProductName
- ProductNumber
- RetailPrice

Should the integration command look like:

Integration.Commands.SaveProduct
- ProductName
- ProductNumber
- RetailPrice
- QuantityInStock

And shouldn't this transaction be distributed across the different modules?  If the transaction goes both ways there will have to be some kind of link between ids..

当集成必须双向进行时,如何从旧系统中使用上帝模型实现反腐败层。

谢谢。

解决方法

这是我的建议:

您将如何在此处进行集成?

集成就像域的其他任何外部部分一样(例如,数据库)。创建一个“连接器”,其唯一的工作就是与该系统进行交互并将其从您的域转换为该系统,反之亦然。您的域可以联系到的一个“接口”将掩盖交互的详细信息,并在基础结构层上实现。

我在问如何将现有数据导入到系统中...可能还会从其他系统导入数据

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

总而言之,将其视为外部系统(因为是外部系统),并像在数据库中一样通过基础结构层对其进行读/写。

编辑: 根据您的修改

更清洁的方法

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

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

无所不在的语言是对此进行思考的一种方式。 SME可能将您的系统描述为“用户下达销售订单(事件1),然后我们从仓库中提取请求的数量(事件2)”。因此,这两个事件在您的域中必须是可区分的。让我知道我是否仍然没有清晰的画面。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-