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