@gav_andrei

Как правильно организовать общение между модулями js с помощью событий?

Есть некая архитектура js приложения, основанная на независимых модулях.
Каждый модуль не знает о существовании другого и может быть изъят из приложения без каких-либо проблем.

Модули общаются между собой с помощью событий.

Вопрос в следующем:
Какой из двух ниже описанных принципов правильнее использовать для организации общения с помощью событий или может есть другие альтернативы?

Первый принцип:
Первый модуль слушает собственные события, вызов которых изменяет состояние модуля. Сколько есть возможных манипуляций с модулем, столько и событий, эти события относятся только к этому модулю.
Другие модули вызывают события первого модуля.
Проблемы/сомнения:
Если я извлеку модуль из системы, то другие модули не перестанут вызывать связанные с ним события, создавая "фоновый шум", который при отладке будет мешать понять что вызывается и кто отслеживает.
События могут вызываться в любом месте модуля, что затруднит очистку от них.
Преимущества:
Если необходимо произвести манипуляцию с другим модулем мы просто вызываем нужное событие и все.

Второй принцип:
Модули слушают все необходимые события других модулей и по их возникновению выполняют нужные действия внутри себя. Также издают собственные события по факту изменений своего состояния.
Проблемы/сомнения:
Код модуля растет, т.к. нужно постоянно дописывать обработчики событий, генерируемых другими модулями.
Преимущества:
При удалении модуля не остается никаких событий, связанных с ним.
Все обработчики событий собраны в одном месте в модуле и их легко почистить от отслеживания устаревших событий.
  • Вопрос задан
  • 2731 просмотр
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Вот это не про вашу ситуацию?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@gav_andrei Автор вопроса
Я читал данный материал, но в текущей реализации приложения нет медиатра и фасада, есть песочница, которая инициализирует все необходимые модули и на этом ее роль заканчивается. Песочниц может быть несколько, в зависимости от клиента, к примеру для мобильных клиентов инициализируются не все модули из основного функционала, плюс ряд дополнительных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы