MVC中的Push vs Pull模型

MVC的推拉模型有什么区别?

是Struts2,Spring MVC Pull基础吗?

根据Struts2采访问题和答案

Struts2是一种基于Pull-MVC的架构,其中所有数据都存储在Value Stack中,并由视图层检索以进行渲染。

特别:

在Push-MVC的情况下,控制器将数据(模型)构造并提供给视图层,方法是将其放入范围变量(如请求或会话)中。 典型的例子是Spring MVC和Struts1。 另一方面,Pull-MVC将通常在控制器中构造的模型数据保存在公共位置,即在动作中,然后由视图层呈现。

推送和拉取的概念是指服务器与客户端相关的function。 在“推送”应用程序中,服务器正在推送或向客户端发送数据。 在“拉”应用程序中,服务器正在拉或等待并接收客户端发起的消息。

这里给出了一个很好的解释mvc-pattern-its-importance-push-pull和这里的pull-vs-push-mvc-architecture

Struts1和Spring都使用Push MVC。 这个问题可能会有所帮助spring-mvc-complex-model-population-from-multiple-sources Struts2使用Pull

Struts2,玩! 等等是MVC模式的各种拉模型实现。

术语“ ”和“ ”直接指视图和模型之间使用的观察者模式的实现类型。 如GoF Observer模式解释中所述,我们有:

在一个极端,我们称之为推模型 ,主体向观察者发送有关变化的详细信息,无论他们是否愿意。 另一个极端是拉模型 ; 除了最小的通知之外,主体只发送任何内容,观察者此后会明确要求提供详细信息。

这意味着推送模型的实现要求View和Model使用相同的语言实现,并且它们在同一环境中执行。 这种实现的好例子是Javascript单页面应用程序 ,其中View和Model组件在浏览器内执行,框架(即Backbone )提供MVC(aka Observer)机制。 通常,Model组件与某种服务器API交互,以持久化并获取持久化数据。

另一方面, pull model允许您使用View组件和Controller / Model组件的不同技术实现MVC。 在这种MVC中,没有明确使用Observer模式,View只与Controller交互。 通常在浏览器中执行的View组件向Controller组件发送模型更新或模型状态的请求。 通常,请求是使用HTTP协议实现的。 这种实现需要使用某种类型的“ 扩充HTML脚本语言 ”,例如JSP,它允许自动创建View和Controller之间的链接。

对不起..我不认为struts 1,struts 2和spring MVC可以作为PUSH MVC ..

因为所有框架都使用在各自的部署描述符中定义的前端控制器[Struts的Filer类和Spring的Controller Listener]。 现在,所有这些框架都通过reflection使用该控制器将表单数据保存在各自的bean [Or model]对象中。

现在,从我们的Action Controller,我们可以接收bean对象并获取值,但是在实际生成bean对象[或模型]的前端控制器中,通过使用request.getParameter(param)或request在其resperctive字段中设置值。内部的getParameterValues(param)方法。所以这可以被认为是PULL。

因此,根据我的想法,我们可以说这些框架可以使用两个层,即最终程序员使用的PULL层和框架基类使用的PUSH层。