这种循环依赖是一件坏事吗?任何潜在的问题?

时间:2010-02-17 16:18:50

标签: c# architecture

这是我在构建一些数据层时最终得到的类:

public class DataRequest
{
  public class DataResponse
  {
    public DataResponse(DataRequest req) { Request = req; }

    public DataRequest Request {get; set;}
    // ... here go some other fields ...
  }

  public Response { get; set; }

  public DataRequest()
  {
    Response = new DataResponse(this);
  }

  public void Execute()
  {
     ... Get some data and fill Response object ...
  }

}

我需要请求知道响应,因为它用数据填充它;我需要响应以了解请求,因为当我将响应传递给其他一些方法时,我希望能够访问原始请求。

您是否看到此架构存在任何潜在问题,例如内存泄漏等,还是仅仅是一个糟糕的设计理念?

2 个答案:

答案 0 :(得分:6)

这看起来并不太邪恶,但你也可以创建一个“DataContext”(想要一个更好的词),既暴露请求又响应,只让每个人知道上下文?即询问回复会询问的请求:

this.Context.Request.SomeProperty;

但这不是记忆问题; .NET不进行引用计数,因此您不必担心循环引用岛。如果它们都无法从其他对象中 ,则会收集它们。问题中的情景不会导致世界结束。

答案 1 :(得分:1)

我认为最好让一个管理器类同时包含请求和响应属性,它会给你提供比这更多的控制

public class DataManager
{
   public DataRequest Request {get; set;}
   public DataResponse Response {get; set;}


  public void Excute () 
{
//do you logic here 
}

}