Отношения между двумя классами - PullRequest
2 голосов
/ 30 октября 2011

У меня есть класс A (диспетчер), который занимается передачей и анализом полученных данных и должен передать их в класс B (бизнес-логика приложения).

Класс B и класс A должны вызывать каждыйдругое, потому что связь двусторонняя: отправка данных из уровня бизнес-логики и получение данных в виде ответов.

Любые предложения по наилучшему дизайну, которые можно использовать для облегчения связи между классами A и B. Я не понимаюне думаю, что они должны просто указывать друг на друга.

Ответы [ 2 ]

1 голос
/ 30 октября 2011

Одним из простых решений является отправка информации с использованием метода в классе B и получение данных с использованием события в классе B. Когда вы начинаете, класс A подписывается на событие, и теперь двусторонняя связь будет работать.

1 голос
/ 30 октября 2011

Если это длительная операция, вы можете подумать о том, чтобы реализовать эти операции как пару методов BeginOperation() и EndOperation(), использовать обратные вызовы или какой-либо другой асинхронный шаблон (отметьте Шаблоны проектирования асинхронного программирования ).

Я бы также избегал циклических ссылок. Я бы реализовал это аналогично дуплексным службам WCF. В проекте B создайте свой бизнес-класс B, и интерфейс, который будет представлять контракт, который должны быть реализованы другими проектами для вызова из B, давайте назовем его IBCallbackContract. Так что вам нужно:

  1. Создать класс B
  2. Создать IBCallbackContract
  3. Создать Initialize(IBCallbackContract) метод, который будет принимать объекты обратного вызова
  4. Создать класс A, который использует класс BL
  5. Реализация IBCallbackContract в проекте А, назовем его BLCallback
  6. При запуске A создайте экземпляр BLCallback
  7. Вызовите Initialize метод B, отправив ему экземпляр BLCallback
...