Существует ли шаблон, подобный инъекции зависимостей, для соединения субъектов и наблюдателей? - PullRequest
1 голос
/ 02 февраля 2010

Отношение субъект-наблюдатель не является отношением зависимости: наблюдатели не нуждаются в субъектах, чтобы существовать, и наоборот.Тем не менее, «соединение» издателей и подписчиков сильно напоминает «Dependency Injection».

В моей игре «Стреляй в глаза» широко используется паттерн «Наблюдатель».Например:

Контролирующий объект порождает объект корабля игрока в начале каждого раунда.Диспетчер призывает фабрику предоставить корабль.Корабль зависит, помимо прочего, от объекта реактора, который может перегреть и уничтожить корабль.Фабрика вводит эти зависимости.Пока все хорошо.

Теперь HUD необходимо знать о статусе корабля, в частности, о температуре реактора, но HUD не не зависит от корабля в смысле DI.: HUD сохраняется после уничтожения корабля.

Вопрос в том, что если диспетчер не имеет ссылки на HUD, как я могу установить связь HUD с кораблем?И это только один маленький, крошечный пример.У меня есть много-много объектов, которые должны будут передавать события друг другу.

Я чувствую, что могу выполнить некоторые подключения на заводе, но это кажется "неправильным" и не помогает вситуации, когда необходимо изменить существующие подписки.

В любом случае, все, что я читал о шаблоне наблюдателя, игнорирует эту более широкую проблему.Есть ли устоявшееся решение?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010

Замок Виндзор имеет возможность ... э-э ... облегчить это :-) Он называется EventWiring Facility.

См:

Если .NET не ваша платформа, вы все равно можете извлечь из этого идеи.

0 голосов
/ 02 февраля 2010

Реализация шаблонов проектирования обычно включает в себя кодирование участников самостоятельно: в данном случае Subject & Observer.Детали того, как эти объекты формируют свои предписанные отношения, действительно (как правило) зависят от вас.Вы можете свободно использовать Spring DI (Java) или любую платформу, которая имеет для вас смысл.

Но я не уверен, что эти отношения являются хорошим подспорьем для типичной структуры DI.Ваши Субъекты - а также, вероятно, ваши Наблюдатели - будут часто появляться или исчезать в ходе игры.

Возможно, вам также понадобятся некоторые Наблюдатели для наблюдения за фабриками, которые производят ваши предметы.Таким образом, они могут получать уведомления о новых Субъектах, которые они могут захотеть отслеживать, и регистрироваться в качестве Наблюдателей за ними.

0 голосов
/ 02 февраля 2010

Вы можете захотеть исследовать с помощью чего-то более общего назначения, такого как «агрегатор событий» или центральный механизм обмена сообщениями / событий, чтобы сделать это. Таким образом, ваш HUD может просто подписаться на типы событий, о которых он заботится, ваши корабли могут поднять / отправить эти события по мере необходимости, и ни один из них не должен знать о другом. Это один из способов красиво отделить вещи.

Не удалось найти хорошую многофункциональную ссылку для вас, но вот обсуждение идеи, связанной с приложением winforms: http://www.lostechies.com/blogs/derickbailey/archive/2009/12/22/understanding-the-application-controller-through-object-messaging-patterns.aspx

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