传统的MVC设计模式

3
我有几个关于模型-视图-控制器架构的问题。我对互联网上找到的所有关于MVC模式的冲突信息和不同的图表感到有些困惑。
1. 下面的图表是否正确表示了层之间的MVC流程?如果是,视图是否允许直接更新模型而不是通过控制器? enter image description here 2.

被动模型和主动模型之间有什么区别,并且每种变体如何影响模型更改向控制器和视图传播?

3.

在模型更新后,新数据是如何被同时获取到视图和控制器中的(包括控制器介入模型更新和不介入模型更新)?

3a. (主动模型-观察者,通知) 视图和控制器是否都会在每次模型更新时得到通知并从模型获取新数据
3b.(被动模型-无通知)在委托模型更新并通知视图有关模型更改之后,控制器是否接收到更新的模型状态

我将非常感谢任何有助于理解MVC的帮助。

1个回答

2
约束通常由您使用的实现规定。例如,在Web上,Symfony对MVC有不同于ASP.NET的想法。
在Web环境中,没有人“通知”任何人,一切都是无状态的,基于HTTP请求和响应。控制器可以接收模型作为POST主体或从GET参数中绑定它,或者根据ID查找实体。
通常,HTTP请求触发控制器执行一个方法,该方法以类似于return View($model)的形式结束。然后,View()方法将将模型呈现到模板中,并将生成的HTML返回给浏览器。我不会称之为通知或更新模型。
当“视图”(此时已呈现为用户浏览器中的HTML)包含表单时,它可以将用户修改的模型POST回控制器。这是否算作视图操作模型?模型不存在于浏览器中。只有一个表单。控制器从请求数据和可能的数据库数据重构模型。该模型是被动的,只是一个属性持有数据的愚蠢数据传输对象。
在桌面应用程序或其他有状态的应用程序("客户端MVC")中,事物通过观察者、监听器等相互通知更新。模型只有一个“实例”,并且存在于客户端应用程序中。这可以被认为是主动模型。

一个控制器可以接收一个模型作为POST请求体或从GET参数中绑定它,或者根据ID查找实体。通过“模型”,您是指“用户输入”吗?“我不会称之为通知或更新模型”。如果用户的HTTP请求是以某种方式更改模型,那怎么办?控制器需要等待模型完成更新(例如执行DB更新任务),然后将更新后的模型呈现到新视图中吗? - michalte97

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接