循环依赖最佳实践

Tim*_*sen 5 c# circular-dependency

我目前正在编写一个网络刮刀,可以从互联网上检索信息.简化它看起来像这样.

数据访问项目

  • 用于检索原始数据的对象
  • 将原始数据解析为对象的对象(!!)
  • 解析器返回的实体.

现在,我正在创建实际的解析器,我将使用它像这样:

using Application.DataAccess;
using Application.DataAccess.Entities;

namespace Application{
 public class TestScraper{
  public static ScrapeIt()
  {
   var source = DataAcces.Retriever.Retrieve("http://example.com");
   DataAccess.Entities.Entity entity = DataAccess.Parser.Parse(source);

   //Do stuf with source here.
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Parser返回一个实体.然而,这是在DataAccess名称空间中,但它没有意义......它是一个圆圈,我真的不知道如何解决这个问题.好吧,我可以想出一些东西,比如在这些层之间创建另一层.

但我只是想知道,你将如何解决这个问题.什么是好的(或最好的做法).

Ed *_*ess 12

您可以通过将两个类引用的内容分解为一个新类来修复循环引用,然后旧类引用新类.

因此,在您的情况下,您可以将实体移出DataAccess,也可以移动到DataAccess和Application使用的新Entities命名空间.

通过这样做,你开始

A <--> D
Run Code Online (Sandbox Code Playgroud)

并最终得到

A --> E
D --> E
Run Code Online (Sandbox Code Playgroud)

  • +1 - 我就是这样做的.定义创建循环引用的公共依赖项,然后将其提取出来. (2认同)