Является ли эта круговая зависимость плохой вещью? Есть потенциальные проблемы? - PullRequest
4 голосов
/ 17 февраля 2010

Вот класс, с которым я закончил при создании слоя данных:

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 ]

6 голосов
/ 17 февраля 2010

Это не выглядит слишком злым, но вы могли бы также создать «DataContext» (из-за отсутствия лучшего слова), который выставляет и запрос, и ответ, и каждый из них знает только о контексте? то есть спросить о запросе, о котором будет спрашивать ответ:

this.Context.Request.SomeProperty;

Это не проблема с памятью; .NET не выполняет подсчет ссылок, поэтому вам не нужно беспокоиться об острове циклических ссылок. Если они все недоступны из других объектов , они будут собраны. Сценарий, о котором идет речь, не приведет к концу мира.

1 голос
/ 17 февраля 2010

Я думаю, что лучше сделать класс менеджера, содержащий свойства запроса и ответа, он даст вам более полный контроль, чем этот

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


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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...