继承的代码库中的循环依赖项

本文关键字:依赖 循环 代码 继承 | 更新日期: 2023-09-27 18:04:08

我仍在学习如何构建更大的代码库(一年前,我在学习时只处理了3/4个小项目的解决方案(,我一直在尝试组织继承的代码库以消除循环依赖问题。

基本上,我有一个由SQL数据库支持的MVC门户项目,该数据库是使用实体框架的代码优先。我还有一个存储库项目,它处理与一些Azure表的通信。这些表中的数据有些重叠,但Azure表不包含来自Portal数据库的大部分信息。

问题的出现是,当我创建某些实体时,解决方案要求在门户数据库中创建这些实体(以便用户可以查看他们的信息(,并在这些Azure表中创建,解决方案的其余部分将这些表用于其他目的。

因此,门户将数据持久化到两者,这意味着我需要在我的MVC项目中使用Repository项目,但我也需要我的Repository项目能够访问MVC项目以获取一些未持久化到Azure表的外围信息。

这显然是一个糟糕的设计,但在结构上有没有一种方法可以绕过它,不需要对Azure表结构进行重大重构或更改,以包括Portal数据库的每一个细节?

我想出的每一个"简单的解决方案"都不是一个解决方案,只会让圆圈变得更大哈哈。自从我继承了这一点以来,设计中的这两张表一直让我感到困惑。

编辑以获得更清晰

我的存储库引用MVC项目,以便使用ApplicationDbContext与Portal数据库进行通信。据我所知,这不容易分离成另一个项目。我的MVC项目引用Repository来将信息存储在Azure表中。这需要保持现状。

我想问题是存储库做得太多了。我开始觉得我应该把它们分开,尽管这是一次返工。

JK

继承的代码库中的循环依赖项

如果我错了,请纠正我,但据我所知,您当前希望在Azure存储和SQL存储之间交换信息。如果是这种情况,那么您应该创建一个BaseRepository,它由SQL和Azure存储继承。然后,可以在BaseRepository的属性中找到"外围信息",其子级可以访问这些属性。

将MVC项目中的"外围信息"提取到MVC和Repository项目都可以引用的另一个新项目,并从Repository项目中删除对MVC项目的引用。

编辑:澄清:目前你有这个圆圈:

MVC -> Repository -> MVC

您指出Repository需要在MVC中提取一些"外围信息"。因此,将"外围信息"放入另一个项目中,让我们称之为PI,并从Repository中删除对MVC的引用(因为Repository需要的所有外部信息现在都在PI中,而不是MVC中(这打破了这个圆圈。这将给你:

MVC -> Repository
MVC -> PI
Repository -> PI

这是打破圆的经典方法,通过创建一个链接"实体"。