当超越RAD(拖放和配置)构建用户界面的方式时,许多工具都鼓励您使用三种设计模式,即模型视图控制器、模型视图演示器和模型视图视图模型。我的问题有三个部分:
这些模式解决了什么问题?它们有什么相似之处?它们有何不同?
当超越RAD(拖放和配置)构建用户界面的方式时,许多工具都鼓励您使用三种设计模式,即模型视图控制器、模型视图演示器和模型视图视图模型。我的问题有三个部分:
这些模式解决了什么问题?它们有什么相似之处?它们有何不同?
当前回答
MVP=模型视图演示者MVC=模型视图控制器两种演示模式。它们将模型(考虑域对象)、屏幕/网页(视图)和用户界面(演示者/控制器)之间的依赖关系分开它们在概念上相当相似,人们根据口味对演示者/控制器进行不同的初始化。这里有一篇关于差异的精彩文章。最值得注意的是MVC模式具有更新视图的模型。
其他回答
你忘了动作域响应程序(ADR)。
正如上面的一些图形所解释的,MVC中的模型和视图之间有直接的关系/链接。在控制器上执行操作,控制器将在模型上执行操作。模型中的该操作将触发视图中的反应。视图在模型状态更改时始终更新。
有些人一直忘记了,MVC是在70年代末创建的,而Web只是在80年代末/90年代初创建的。MVC最初不是为Web创建的,而是为桌面应用程序创建的,其中Controller、Model和View将共存。
因为我们使用的是仍然使用相同命名约定(模型-视图-控制器)的web框架(例如:.Laravel),所以我们倾向于认为它必须是MVC,但实际上是其他东西。
相反,请查看操作域响应程序。在ADR中,控制器获得一个动作,该动作将在模型/域中执行操作。到目前为止,情况是一样的。不同的是,它然后收集该操作的响应/数据,并将其传递给Responder(例如:.view())进行渲染。当在同一组件上请求新操作时,将再次调用Controller,并重复循环。在ADR中,模型/域和视图(Reposer的响应)之间没有任何联系。
注意:维基百科指出“然而,每个ADR动作都由单独的类或闭包表示”。这不一定是真的。多个操作可以在同一控制器中,并且模式仍然相同。
mvc adr模型视图控制器动作域响应器
MVP=模型视图演示者MVC=模型视图控制器两种演示模式。它们将模型(考虑域对象)、屏幕/网页(视图)和用户界面(演示者/控制器)之间的依赖关系分开它们在概念上相当相似,人们根据口味对演示者/控制器进行不同的初始化。这里有一篇关于差异的精彩文章。最值得注意的是MVC模式具有更新视图的模型。
简而言之,
在MVC中,View有UI部分,它调用控制器,控制器反过来调用模型&模型,然后将事件返回视图。在MVP中,视图包含UI,并调用演示者作为实现部分。演示者直接调用视图以更新UI部分。包含业务逻辑的模型由演示者调用,与视图没有任何交互。因此,演示者完成了大部分工作:)
这是对这些设计模式的许多变体的过度简化,但这是我喜欢思考两者之间差异的方式。
MVC
MVP
我认为Erwin Vanderwalk的这张图片(以及附带的文章)是对MVC、MVP和MVVM及其相似性和差异的最好解释。这篇文章没有出现在搜索引擎的“MVC、MVP和MVVM”查询结果中,因为文章的标题没有包含“MVC”和“MVP”字样;但我认为这是最好的解释。
(这篇文章也符合鲍勃·马丁大叔在他的一次演讲中所说的:MVC最初是为小型UI组件而设计的,而不是为系统的架构而设计的)