视图的工作是作为视图技术的适配器。在这种情况下,您的视图技术可能是 jQuery over HTML via JavaScript。视图应该被设计成做三件事:
- 知道事件何时发生,并将这些事件传达给演示者(这可能是间接的,使用像postal.js这样的消息传递框架)
- 告诉演示者(当被问到时)“x 的值是什么”,其中x是视图中表示的值。
- 接受来自演示者的消息(通常通过直接方法调用)以更改视图上的值。
被动视图模式中的视图不是有状态的。我再说一遍,视图不代表状态。我的意思是,所有状态和状态转换的知识都由演示者表示。视图只是在演示者和实际视图技术之间提供间接的粘合剂。 除了上述三个要点之外,它没有封装任何关于如何处理其包含的信息的知识。这很重要,因为您永远不应期望视图处于一致状态。您应该始终让演示者负责管理视图的状态。

上面的堆栈演示了我如何预见模型、视图和演示者的交互,以及它们与视图技术和控制器的关系。
- 浏览器、HTML 和 DOM(通过 jQuery 管理)是视图技术。这些本质上很复杂,无法代表您的模型。
- 视图保护您的逻辑不受视图技术的影响。它提供了间接性,因此您可以专注于您的演示者中的普通旧代码。视图应该使用某种消息传递给演示者。这可以防止视图和演示者之间的双向依赖。它还允许多个演示者操作一个视图。
- 演示者应负责理解视图的抽象性质,并应根据其与视图的接口来管理模型的状态。它能够理解如何从控制器中检索模型,以及如何将模型持久化回服务器。
- 该模型是特定时间点的状态表示。它还可以作为控制器和演示者之间的 DTO 。在 JavaScript 中,将演示者行为简单地添加到模型中很容易,有时更可取。
- 控制器协调应用程序内的导航,并负责从表示中抽象出后端服务。