Marionette.js Mediator ('global' commands vs app controller) I am currently migrating a large backbone application over to Marionette and am curious as to the opinions on what is a better design for mediating activity between modules.

I have an Application that have several Modules where an action in one module might cause activity to happen in other modules.

Since these all are coupled to the Application I could simply use the Wreqr interface where:

Module 1:

someActivity: -&gt;
   App.vent.trigger("skyFalling")


Module 2:

initialize: -&gt;
   App.vent.on("skyFalling", @closeOrSomething)


Module 3:

initialize: -&gt;
   App.vent.on("skyFalling", @blinkRapidly)




Or would it be better to trigger an event in Module1 where the Application (or a controller tied to the App) listens and then calls the 'closeOrSomething' and the 'blinkRapidly' functions directly on the modules (since the App is aware of all the modules that it is loading).

Application:

skyFallingEventHandler: -&gt;
   Module2.closeOrSomething()
   Module3.blinkRapidly()
I have the exact same quandary (and found this question googling for answers). On first read through my opinion was that triggering events on the modules themselves was the best approach on the basis that this loosens any coupling between the modules and other components. However, having given it more thought it seems that this is exactly what the Wreqr interface has been designed for, so actually my approach would be to use the aggregator to handle events. I’d be interested to know which approach you decide to take.