说明
我正在处理一个已有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做一个选择?
我希望描述,示例和问题有意义
答案 0 :(得分:1)
首先,您应该在应用中定义用于持久保存产品的端口。为此,您应该从应用程序的角度对自己问:
对于我要解决的问题,在我的应用中是否重要?产品中的概念是存储在多个数据存储中还是仅存储在一个数据存储中?
如果有关系,则应定义3个端口(每个数据存储一个)。您将在应用程序中合并数据。由于将概念存储在不同的位置对于您的应用程序很重要,因此您的应用程序知道它是应用程序的一部分。
如果没关系,您应该只定义一个端口来抽象持久性。并为该端口定义一个适配器。适配器将根据您要检索的属性(价格,描述,名称)访问所需的数据库。我不会在适配器中另外创建3个适配器的情况下抽象出对这些数据库的访问。我将直接从产品适配器访问3个数据库。但这取决于你。