LINUX.ORG.RU

Получилось ли реализовать паттерн mediator?

 , ,


0

1

скажите пожалуйста получилось ли у меня в полной мере реализовать паттерн mediator?

JSFIDDLE: http://jsfiddle.net/zlodiak/x96qwevg/2/

я написал болванку к игре. она состоит из:

  • 1. меню,
  • 2. имитации уровня,
  • 3. информационном экране с номером уровня,
  • 4. информационном экране с информацией о проигрыше,
  • 5. информационном экране с информацией о выигрыше

даже таким небольшим количеством сущностей трудно управлять поэтому я решил:

  • 1. чтобы каждая отдельная сущность решала только свою узкоспециализированную задачу,
  • 2. чтобы вся логика управления игрой содержалась в объекте-медиаторе. в частности в его методе controller

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

грамотно ли я применил паттерн, не допустил ли ошибку, которая позже доставит много проблем? ну и вообще буду благодарен за любые замечания

не обращайте внимания на некоторые упрощения, которые я допустил. а именно:

  • 1. я умышленно не удаляю сущности при помощи delete после того как они отработали и уже не используются. мне кажется, это очень незначительные утечки памяти
  • 2. я допустил дублирование кода. можно было вместо трёх информационных экранов создать один универсальный. скажу честно, просто не получилось. но сейчас меня больше беспокоит паттерн mediator

Не понял какое место в коде ты называешь медиатором.

https://github.com/nodeca/event-wire - вот это делали для себя. Посмотри, сравни, общего вообще ничего.

Медиатор (брокер?) штука удобная, но обычно глобальная. В этом его плюс и минус одновременно. Поначалу здорово, на на больших проектах начинает сказываться отсутствие изоляции. Если программисты вменяемые, и могут договориться насчет неймспейсов - можно ехать довольно долго. А если начнут засирать всем подряд то наступит ад - потом разобраться невозможно откуда что приехало.

Vit ★★★★★
()
Ответ на: комментарий от Vit

по моей задумке медиатор это класс Game. а остальные классы(подчинённые) обмениваются данными через Game

один из спорных для меня моментов в том, что в Game я каждый объект инициализирую, передавая в его конструктор this. таким образом каждый подчинённый объект может отправить что-нибудь в медиатор(Game), а тот уже передаст кому нужно. я так понял суть паттерна

prozaik
() автор топика
Ответ на: комментарий от prozaik

IMHO ты функциональность сильно смешиваешь. В итоге упоминание медиатора больше сбивает с толку, чем помогает. Но это только мое мнение.

Если тебе надо «message bus» - возьми отдельную библиотеку, станет понятнее кто за что отвечает.

Vit ★★★★★
()
Ответ на: комментарий от Vit

спасибо за совет, но мне уже хватит библиотек. я потому то и ринулся в низкоуровневых базовых вещать разбираться

prozaik
() автор топика
Ответ на: комментарий от prozaik

Там только надпись на чёрном фоне и всё.

1. Количество врагов: Мало
2. Прочность стен: Кирпичные
3. старт игры 
Я понимаю, оно должно как-то кнопки перехватывать, но не делает.

crutch_master ★★★★★
()
Ответ на: комментарий от prozaik

Это всё скатиться оверпаттернинг и оверинженеринг. Ты будешь писать паттерны ради паттернов и получишь ад и религиозное мракобесие.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Грамотное применение паттернов помогает упростить и лучше организовать код и данные. Только фейл тут в том, что паттерны ради паттернов без понимания почему так, а не иначе, и чем одни уместней других (и какие у выбора будут последствия), ни к чему не приведёт, и паттерн на паттерне это явно не то, к чему стоит стремиться. Такое вот имхо.

По-моему медиатор достаточно ограниченный паттерн и потом будут проблемы и говнокод, стоит сразу думать о будущем. Но я конечно плохо понимаю большинство паттернов, просто видел к чему они приводят.

anonymous
()
Ответ на: комментарий от anonymous

По-моему медиатор достаточно ограниченный паттерн

Тащемта зависит от реализации.
Тот же mediatr, например, позволяет полностью построить приложение независимое от конкретного фреймворка + через behaviors прикрутить автоматическую валидацию реквестов, транзакции и еще черт знает что.

ritsufag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.