我遇到循环依赖问题。有类似的问题已经被问到,我已经阅读了很多答案。大多数处理解决方案,但我想重构,所以我有正确的,我想在我出错的地方输入一些。我可以改变我正在做的事情而不是整个项目架构。
我在Visual Studio 2012中使用VB.Net。
我有两个类库:
我的表示层调用DataLayer中的方法,该方法从DataObject类库中返回对象 (我有点简化 - 我实际上有一个控制器层,但它需要上面两个类库的引用。这是一个现有的架构,从我的时间开始。)
在DataObject类库中,我有一个表示文件的抽象类。它具有诸如filename,userID等属性。它还有一个方法GetFile(),我在派生类中编码,因为有不同的方法来获取文件。 DataLayer方法返回这些文件对象的集合,但我不想在需要之前获取实际文件。
到目前为止,我有一个派生类,它调用webService(使用baseClass中的属性)和一个访问fileSystem的派生类。两者都返回表示文件的字节数组。调用类不需要知道如何检索文件。
现在我有了使用数据库中的数据动态构建文件的新要求。我可以使用基类中的属性获取所需的所有数据。
我的问题是我的GetFile()方法需要访问我的DataLayer类库以从数据库中提取数据,这会导致循环依赖。 DataLayer类库自引用DataObject这就是它的回报。但是现在我需要从DataObjects中的类调用DataLayer。
我无法改变我们的架构,但我可以改变我的方法。
有什么意见吗?
答案 0 :(得分:0)
我想我有答案。
在我的具体类中,当我最初加载数据时(在DataLayer中),我将获得创建文件所需的所有数据。我将它存储在我的具体类中的一个新属性中,我的GetFile()方法将用它来构建文件。
这有一点开销 - 我进行数据库调用,并在可能不需要时将所有这些数据放入内存中。我会试一试,看看性能如何。
对这种方法的任何批评?