【发布时间】:2021-08-31 00:27:39
【问题描述】:
我们有一个外部拥有的 SQL 服务器,其中的数据需要定期移植到我们的团队拥有的 (SQL) 服务器中。
外部和内部服务器共享相同的域概念,但以非常不同的形式存在。将对象从其外部形式转换为我们自己的领域形式是一个复杂的过程。
目前这样做是这样的:
- Adapter 查询 External Db,使用 Automapper 映射到 DTO(Adapter 位于底层)
- 适配器将DTO返回给应用层(DTO在应用层中定义)
- 工厂从 DTO 构造域对象并工厂加载相关的域聚合以设置导航 ID + 其他属性(工厂位于应用层)
将工厂在这里的工作视为真正构建一个新对象是否正确,因为它实际上是从外部来源为对象补水,并且我们添加了更多(必需的)装饰?实体 ID 与其转换后的 ID 保持一致。
但是,将其称为存储库也感觉不对,因为除了从单个数据库中进行简单的水合之外,还有更多的工作?
我还是 DDD 的新手,因此感谢所有输入!
【问题讨论】:
-
为什么要写代码来做数据导入?为什么不使用 BCP 之类的东西?更快、更简单。
-
实际上有大约 30 个外部 SQL 服务器具有我们从中提取的相同数据库架构。有逻辑进入哪个服务器子集(或所有服务器)适合在给定时间点导入。我们觉得像 BCP 这样的选项没有提供所需的灵活性或长期可扩展性。此外,我们仍然需要 c# 代码来完成数据导入后的水合。水合和输入需要在同一阶段发生,以防止我们的数据库中存在无效数据
标签: c# domain-driven-design ddd-repositories hexagonal-architecture