我目前正在将一个大型骨干应用程序迁移到Marionette,并对如何在模块之间调解活动的更好设计提出意见。
我有一个具有多个模块的应用程序,其中一个模块中的操作可能导致其他模块中发生活动。
由于这些都与应用程序耦合,我可以简单地使用Wreqr接口,其中:
第1单元:
someActivity: ->
App.vent.trigger("skyFalling")
第2单元:
initialize: ->
App.vent.on("skyFalling", @closeOrSomething)
第3单元:
initialize: ->
App.vent.on("skyFalling", @blinkRapidly)
或者最好在Module1中触发一个事件,其中Application(或与App绑定的控制器)监听,然后直接在模块上调用'closeOrSomething'和'blinkRapidly'函数(因为App知道它正在加载的所有模块中。)
应用
skyFallingEventHandler: ->
Module2.closeOrSomething()
Module3.blinkRapidly()
答案 0 :(得分:1)
我选择了app.vent.trigger()
和app.vent.on()
的Mediator方式,并且不与模块的方法绑定。
这样你就可以解耦模块和应用程序了
只需使用Observer
+ Mediator
(通过mediator对象的pub / sub事件)。而且您不需要关心方法名称及其调用。
如果您的模块/类已在内部更改,并且不再需要对某些应用程序的事件作出反应,则只需禁用模块中的事件处理(订阅) 我需要修改Application
中的代码。这样另一位工程师就可以修改模块,也不需要修改Application
。