model-view-controller - MVP 模式 : should multiple Presenters be decoupled or can they communicate directly?

标签 model-view-controller mvvm mvp

我的用户界面如下所示:

    +--------+---------------+
    | model1 | model details |
    | model2 |     here,     |
    | model3 | loaded as the |
    |        | user selects  |
    |        | a model from  |
    |        |   the left.   |
    |        |               |
    +--------+---------------+

我正在使用MVP pattern来驱动这个用户界面。

我在这里简化了很多,但为了分而治之,我想将 Presenter 分成两个:一个处理左侧 View 中的用户手势(用户更改此 View 中的模型列表,例如排序)和另一个在右侧 View 中处理用户手势的演示者(用户更改此 View 中的单个模型)。

虽然左侧的演示器与整个模型列表交互,但右侧的演示器仅与单个模型交互:用户从左侧列表中选择的模型。 IOW ui 是从左到右驱动的。

用户选择(即单击)左侧的模型后,我当前的实现如下所示(大致):

LeftPresenter.onModelClick = function(event) {
    var model = this.getModelFromEvent(event);
    this.view.setSelectedModel(model); // updates list widget on left
    RightPresenter.setSelectedModel(model); // notify the other Presenter
}

RightPresenter.setSelectedModel = function(model) {
    // lazy load the model from the db, and update the
    // view when the model fires the "loadComplete" event
    model.bind('loadComplete', this.view.setModel);
    model.lazyLoad();
}

这是我对 MVP 模式或任何 MVC GUI 模式感到模糊的部分:

  1. 一个 ui 可以像这样由多个 Presenter 驱动吗?
  2. 多个 Presenter 是否应该解耦,还是可以直接相互通信(如此处所示)?

所以我的问题归结为:RightPresenter 表明用户在 LeftPresenter 的 View 中选择了模型的最佳方式是什么

最佳答案

1。一个ui可以由多个驱动吗 主持人喜欢这样吗?

是的

2。是否应该有多个演示者 解耦还是可以通信 直接相互连接,如图所示 这里?

我的处理方式是我有一个看起来像这样的框架

当事件发生时,UI_Object 会处理该事件,创建并触发 Command 对象。每个 UI_Object 都实现 UI_Views 中的 View 接口(interface),并将其自身注册到 UI_View。命令对象可以通过接口(interface)访问UI_View中注册的UI对象。

例如,在我的一个金属切割应用程序中,有一个称为 HOLD 的屏幕元素,其中包含尚未放置在金属板上进行切割的所有零件。零件可以通过多种方式进入货舱。从零件文件加载、由形状编辑器创建、由我们的 CAD 屏幕创建或从金属板上拾取。

这些操作中的每一个都被封装到实现命令设计模式的单独命令对象中。当命令对象执行时,它会调用。

CuttingScreen.Refresh
CADScreen.Refresh
ShapeEditor.Refresh

其中每一个都会刷新相应的屏幕来更新保留。

现在我可以向我的应用程序界面添加一个方法。 MyCuttingApplication.HoldRefresh 将依次调用所有三个刷新。

但是重要的一点是你的 View 调用一个使用 View 实现的接口(interface)的命令来更新。 View 对象将自身注册到较低层。

关于model-view-controller - MVP 模式 : should multiple Presenters be decoupled or can they communicate directly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576529/

相关文章:

silverlight - 如何从 ViewModel 进行绑定(bind)

Android Kotlin 单元测试失败并出现 io.mockk.MockKException : no answer found for

winforms - Winforms MVP

java - RxJava2 上的 MVP。何时使用它

model-view-controller - 如何将 SquishIt 与不是有效虚拟路径的源一起使用

java - MVC 和 Java-EE

javascript - knockout : How to use checked binding with observable array of whole objects, 但比较个别属性?

java - 将 MVC 与 libgdx scene2d 结合使用

javascript - 有没有办法保存单个图像并防止用户使用 dropzone.js 放置多个图像?

asp.net - 为什么在大多数 ASP.NET MVP 实现中 Presenters 附加到 View 事件而不是 View 调用 Presenter 方法?