-1

描述

我正在处理一个有近 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 制作一个适配器?

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

4

1 回答 1

1

首先,您应该在您的应用程序中定义用于持久化产品的端口。为此,您应该从应用程序的角度问自己:

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

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

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

于 2018-11-18T09:42:53.837 回答