我还在学习如何构建更大的代码库(一年前我只学习了3/4小项目的解决方案),而且我一直在尝试组织一个继承的代码库来获取摆脱循环依赖问题。
基本上我有一个由SQL数据库支持的MVC Portal项目,该数据库代码首先使用Entity Framework。我还有一个存储库项目,它处理与某些Azure表的通信。这些表中的数据有些重叠,但Azure表中没有包含Portal数据库的大部分信息。
问题出现在我创建某些实体时,解决方案因为它要求在Portal数据库中创建(以便用户可以看到他们的信息),并且在这些Azure表中,其他解决方案用于其他目的。
所以Portal将数据保存到两者,这意味着我需要在我的MVC项目中使用Repository项目,但我还需要我的Repository项目能够访问MVC项目以获取一些未持久存储到Azure的外围信息表。
这显然是糟糕的设计,但在结构上有一种解决方法,不需要对Azure表结构进行重大重构或更改以包含Portal数据库的每个细节?
我提出的每一个“简单修复”都不是一个解决方案,只是让Circle变得更大哈哈。设计中的这两个表让我很困惑,因为我继承了这个。
编辑以获得更清晰
我的存储库引用MVC项目,以便使用ApplicationDbContext与Portal db进行通信。根据我的理解,这不容易分成另一个项目。 我的MVC项目引用Repository来存储Azure表中的信息。这需要保持原样。
问题我猜是存储库做得太多了。我开始认为我应该把它们分开,尽管它很复杂。
JK
答案 0 :(得分:1)
如果我错了,请纠正我,但根据我的理解,您目前希望在Azure存储和SQL存储之间交换信息。如果是这种情况,那么您应该创建一个BaseRepository
,它由SQL和Azure存储继承。那么"周边信息"可以在BaseRepository
的属性中找到,可由其子级访问。
答案 1 :(得分:0)
将MVC项目中的“外围信息”解压缩到MVC和Repository项目可以引用的另一个新项目,并从Repository项目中删除对MVC项目的引用。
编辑:澄清:目前你有这个圈子:
MVC -> Repository -> MVC
您声明存储库需要在MVC中提取一些“外围信息”。因此,将“外围信息”放入另一个项目中,让我们称之为PI,并从存储库中删除对MVC的引用(因为存储库需要的所有内容现在都在PI而不是MVC中)。 这打破了圈子。这会给你:
MVC -> Repository
MVC -> PI
Repository -> PI
这是通过创建链接“实体”来打破圈子的经典方法。