【问题标题】:Load object from multiple datasources with hexagonal architecture (ports and adapters)从具有六边形架构(端口和适配器)的多个数据源加载对象
【发布时间】:2018-11-12 08:03:28
【问题描述】:

说明

我正在处理一个已有近 40 年历史的项目,其中包含大量遗留代码。多年来,添加了多个数据库。现在我正在逐步将其转换为带有端口和适配器的六边形架构。

到目前为止,我总是为每个数据库创建 1 个适配器。但是使用这段代码这样做会给我在我的域中我的数据库结构的表示(我不想要)。

示例

如果我的域中有一个 Product 对象,看起来像这样:

public class product()
{
public decimal Price {get; set;}
public string Description {get; set;}
public string Name {get; set;}

}

在这种情况下,价格可能来自数据库 1,描述表来自数据库 2,名称来自数据库 3。所有这些都由唯一代码链接。

问题

如何在六边形架构中做到这一点?我应该:

  • 使用多个存储库制作 1 个 productAdapter(每个数据库 1 个)

  • 为每个数据库制作一个适配器并将所有内容合并到 我的域(它提供了与我的域相关的域代码 数据库结构)

  • 为每个数据库制作一个适配器和一个调用数据库适配器的productAdapter?

我希望描述、示例和问题有意义

【问题讨论】:

    标签: c# adapter hexagonal-architecture


    【解决方案1】:

    首先,您应该在您的应用中定义用于持久化产品的端口。要做到这一点,您应该从应用的角度问自己:

    在我的应用程序中解决它试图解决的问题是否重要,产品中的概念是存储在多个数据存储中还是仅存储在一个中?

    • 如果重要,您应该定义 3 个端口(每个数据存储一个)。您将合并应用程序中的数据。由于对于您的应用而言,将概念存储在不同的位置很重要,因此您的应用知道这一点,它是您应用的一部分。

    • 如果没关系,您应该只定义一个端口来抽象持久性。并为端口定义一个适配器。适配器将根据您正在检索的属性(价格、描述、名称)访问它需要的数据库。我不会在创建另外 3 个适配器的适配器中抽象对这些数据库的访问。我会直接从产品适配器访问 3 个数据库。但这取决于你。

    【讨论】:

    • 没关系,所以我用 1 个适配器连接到 3 个数据库。很高兴得到确认。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2018-10-30
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多