0

我遇到了循环依赖的问题。有人问过类似的问题,我已经阅读了很多答案。大多数都处理变通方法,但我想重构,所以我认为它是正确的,我想对我哪里出错的地方提供一些输入。我可以改变我正在做的事情,但不能改变整个项目架构。

我在 Visual Studio 2012 中使用 VB.Net。

我有两个类库:

  1. DataLayer用于访问数据库。
  2. DataObject包含代表我的业务对象的类。

我的表示层调用从 DataObject 类库返回对象的 DataLayer 中的方法。
(我做了一些简化——我实际上有一个控制器层,但它需要引用上面的两个类库。这是我之前的现有架构。)

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


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

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

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

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

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

有什么意见吗?

4

1 回答 1

0

我想我有答案。

在我的具体类中,当我最初加载数据时(在 DataLayer 中),我将获得创建文件所需的所有数据。我将把它存储在我的具体类中的一个新属性中,我的 GetFile() 方法将使用它来构建文件。

这有更多的开销——我进行数据库调用,并在可能不需要时将所有这些数据放入内存中。我会试一试,看看性能如何。

对这种方法有任何批评吗?

于 2013-08-21T19:56:27.160 回答