Model-View-Presenter中的Presenter是否创建视图?
收藏

如何在MVP中创建视图?演示者是否总是创建它们(在子视图的情况下,除了视图之外)?还是它是单独的第三方组件或App或创建它们的东西?

我们还要补充一点,我可能将在Dojo Toolkit / ExtJS(即JavaScript)上执行此操作。

因此,我有以下代码行:

var v = new MyApp.view.User();
var p = new MyApp.presenter.User();

两条线都应该准确地放在哪里?主持人是否实例化视图,反之亦然?什么实例化了第一个实例?

最佳答案

这取决于 ...

MVP的主要目标是以一种既易于理解又易于维护的方式将复杂的决策逻辑与UI代码分开。通常,另一个目标是使演示者中的决策逻辑可测试。

FVP在2004年描述了MVP模式,他在2006年将MVP模式划分为Supervising Conroller(SC)和Passive View(PV)。在SC中,视图绑定到模型,但在PV中不绑定。在PV中,视图仅由演示者直接更改。

在SC和PV中,演示者都必须更新视图并对用户对视图所做的更改(例如输入文本或按下按钮)做出反应。当您在Presenter上使用View调用方法时,就会出现您描述的问题,因为View需要引用Presenter,反之亦然。如果这样做,您可以简单地决定是谁启动这一切。选项有:

  1. 视图创建Presenter的实例。加载视图后,它会在Presenter上的初始化函数中将自身传递给Presenter。
  2. 另一种方法是:Presenter创建View并将自身通过View的初始化函数传递给View。
  3. 您将引入第三个对象,该对象同时创建View和Presenter,将它们连接在一起并初始化它们。

所有选项都使您可以实现关注点分离和决策逻辑可增强性的“ MVP目标”。我不认为这些方法在理论上是对还是错–您只需要选择最适合您所使用技术的方法即可。最好在整个应用程序中保持一致。

    公众号
    关注公众号订阅更多技术干货!