0

我遇到了循环依赖问题。有人问过类似的问题,我读了很多答案。大多数处理变通方法,但我想重构,所以我有正确的,我想就我出错的地方的一些意见。我可以改变我正在做的事情,但不是整个项目架构。正确重构以避免循环依赖

我在Visual Studio 2012

使用VB.Net我有两个类库:

  1. 数据层访问数据库。
  2. DataObject其中包含代表我的业务对象的类。

我的表示层调用DataLayer中的方法,它从DataObject类库中返回对象。
(I有所简化 - 我确实有一个控制器层,但它需要上述两个类库引用这是现有的体系结构,是从我的时间之前。)

在数据对象类库我有一个表示文件的抽象类。它具有诸如文件名,用户ID等属性。它还有一个方法GetFile(),我在派生类中编码,因为有不同的方法来获取文件。 DataLayer方法返回这些文件对象的集合,但我不想在实际需要之前获取实际的文件。



到目前为止,我有一个派生类,它调用一个webService(使用来自baseClass的属性)和一个访问fileSystem的派生类。两者都返回表示文件的字节数组。调用类不需要知道如何检索文件。

现在我有一个新的需求,即使用数据库中的数据即时构建文件。我可以使用基类中的属性获取所需的所有数据。

我的问题是,我的GetFile()方法将需要访问我的DataLayer类库从数据库中提取数据,从而导致循环依赖。 DataLayer类库具有对DataObject的引用,因为这是它返回的内容。但是现在我需要从DataObjects中的类调用DataLayer。

  • 我可以从演示调用数据层并将结果传递到 我的数据对象的的GetFile()方法,但后来我的表现层 需要做一些特别为这个派生类。我的目标是 派生类处理GetFile,而不需要知道 有关实现。
  • 我可以为这个DataLayer代码创建一个新的类库,但我不喜欢特殊情况。
  • 我可以直接在DataObject类中访问数据库,但是这个 绕过了分层架构。

我不能改变我们的架构,但我可以改变我的方法。

任何意见?

回答

0

我想我找到了答案。

在我的具体类,当我最初加载数据(数据层),我会得到我需要创建该文件的数据。我将它存储在我的GetFile()方法将用于构建文件的具体类中的新属性中。

这有一点点更多的开销 - 我让DB电话,并把所有这些数据在内存中时,可能并不需要它。我会试试看看性能如何。

这种方法的任何批评?