Область и связь между объектами - PullRequest
0 голосов
/ 11 апреля 2009

Я работаю в Delphi (и терминологии Delphi), но мой вопрос не зависит от языка.

Предположим, у вас есть класс TClient, который отправляет сообщения другому классу, TFacade. Я предполагаю, что экземпляры TClient будут иметь закрытую ссылочную переменную типа TFacade. Метод где-то в TClient создаст экземпляр TFacade и назначит его этой закрытой переменной. Клиентский класс TClient должен будет использовать класс TFacade.

Между тем, TFacade работает с другими классами (назовите их WorkerClass1, WorkerClass2 и WorkerClass3). Предположительно экземпляры TFacade делают то же самое - они имеют частные переменные WorkerClass и создают экземпляры WorkerClass (возможно, в конструкторе TFacade). Классы TFacade должны использовать модули WorkerClass.

Так как же информация возвращается из WorkerClasses обратно в TClient? Например, если TClient является формой, он может получать пользовательский ввод, который используется TFacade и, в свою очередь, используется WorkerClasses. Однако после того, как WorkerClasses манипулируют или используют информацию, им необходимо передать информацию обратно в TClient (т. Е. Выходные данные будут отображены в форме TClient).

Надеюсь, это понятно. По сути, я просто спрашиваю, вызывает ли Class1 метод в Class2, а Class2 вызывает метод в Class3, как Class3 отправляет информацию обратно в Class1? Поскольку я новичок, не бойтесь быть слишком простым или слишком конкретным в своем ответе. Я справлюсь: -)

Спасибо, как всегда - Эл С.

Ответы [ 4 ]

2 голосов
/ 11 апреля 2009

Надеюсь, это понятно. По сути, я просто спрашиваю, вызывает ли Class1 метод в Class2, а Class2 вызывает метод в Class3, как Class3 отправляет информацию обратно в Class1?

Это не так, так как это слишком тесно связывает предложения в вашем дизайне.

Вместо этого Class3 связывается только с Class2. Таким образом, Class1 не должен ничего знать о Class3, а наоборот . Таким образом, вы можете поменять Class1 и Class3 без необходимости что-либо менять, кроме Class2.

Существуют и другие, более продвинутые идиомы для дальнейшего уменьшения связи, но этого достаточно для начала.

1 голос
/ 11 апреля 2009

У вас есть много вариантов на выбор, с компромиссами. Некоторые параметры могут быть не «хорошими» в зависимости от того, чего вы хотите достичь:

  • Используйте параметры функции и возвращаемые значения для перемещения битов данных.
  • Используйте параметры ссылки / выхода для сбора данных.
  • Использовать функции / делегаты обратного вызова.
  • Использовать события (если поддерживается языком).
  • Используйте один общий случай, когда собрана вся интересная информация.
  • Пусть class1 реализует стабильный интерфейс, который может использоваться class3.
  • Использование центрального хранилища, например, общей памяти, файлов, базы данных и т. Д.
  • Проверьте шаблоны проектирования.
  • Проверка идиом в платформе.
0 голосов
/ 11 апреля 2009

Информация может быть передана в параметрах функции и может быть возвращена через возвращаемое значение функции.

0 голосов
/ 11 апреля 2009

Одним из возможных способов является использование обратных вызовов, см. http://en.wikipedia.org/wiki/Callback_(computer_science).

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