2

我目前正在将一个大型主干应用程序迁移到 Marionette,并且很好奇关于什么是更好的模块之间中介活动设计的意见。

我有一个具有多个模块的应用程序,其中一个模块中的操作可能会导致其他模块中发生活动。

由于这些都与应用程序耦合,我可以简单地使用 Wreqr 接口,其中:

模块一:

someActivity: ->
   App.vent.trigger("skyFalling")

模块 2:

initialize: ->
   App.vent.on("skyFalling", @closeOrSomething)

模块 3:

initialize: ->
   App.vent.on("skyFalling", @blinkRapidly)

或者最好在模块 1 中触发一个事件,应用程序(或绑定到应用程序的控制器)监听,然后直接在模块上调用“closeOrSomething”和“blinkRapidly”函数(因为应用程序知道所有它正在加载的模块)。

应用:

skyFallingEventHandler: ->
   Module2.closeOrSomething()
   Module3.blinkRapidly()
4

1 回答 1

1

我选择了调解器方式,app.vent.trigger()并且app.vent.on()不与模块的方法绑定。这样您就可以将模块和应用程序解耦。
并且只需使用Observer+ Mediator(通过中介对象发布/订阅事件)。而且您不需要关心方法名称及其调用。如果您的模块/类已在内部更改并且不再需要对某些应用程序的事件做出反应,只需禁用该模块内的事件处理(订阅),无需修改​​ . 这样其他工程师可以只修改模块而无需修改。ApplicationApplication

于 2013-07-18T21:49:47.853 回答