【问题标题】:Marionette.js Mediator ('global' commands vs app controller)Marionette.js 调解器(“全局”命令与应用控制器)
【发布时间】:2013-07-18 21:20:15
【问题描述】:

我目前正在将一个大型主干应用程序迁移到 Marionette,我很好奇关于如何更好地设计模块之间的活动的意见。

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

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

模块 1:

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()

【问题讨论】:

  • 这个问题可能太自以为是了。这两种方法都行得通,你很可能会为任何一种方法提出强有力的论据。这个问题可能更适合codereview.stackexchange.com

标签: design-patterns backbone.js marionette mediator


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多