MVC的推拉模型有什么区别?
是基于 Struts2、Spring MVC Pull 的吗?
Struts2 是一个基于 Pull-MVC 的架构,其中所有数据都存储在 Value Stack 中,并由视图层检索以进行渲染。
具体来说:
在 Push-MVC 的情况下,数据(模型)由控制器构造并提供给视图层,方法是将其放入范围变量(如请求或会话)中。典型的例子是 Spring MVC 和 Struts1。另一方面,Pull-MVC 将通常在 Controller 中构建的模型数据保存在一个公共位置,即在动作中,然后由视图层呈现。
推和拉的概念是指服务器相对于客户端所做的事情。在“推送”应用程序中,服务器在它自己的启动时向客户端推送或发送数据。在“拉取”应用程序中,服务器正在拉取或等待并接收客户端发起的消息。
这里给出了一个很好的解释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模式的各种拉模型实现。
术语“ push ”和“ pull ”直接指在 View 和 Model 之间使用的观察者模式的实现类型。如 GoF 观察者模式解释中所述,我们有:
在一种极端情况下,我们称之为推送模型,主体向观察者发送有关更改的详细信息,无论他们是否想要。另一个极端是拉模型;主体只发送最少量的通知,然后观察者明确要求提供详细信息。
这意味着推送模型的实现需要View和Model使用相同的语言实现,并且在相同的环境中执行。这种实现的好例子是Javascript 单页应用程序,其中 View 和 Model 组件在浏览器内执行,并且框架,即Backbone,提供 MVC(又名 Observer)机制。通常,模型组件与某种服务器 API 交互,以持久化和获取持久化数据。
另一方面,拉模型允许您使用不同的技术实现 MVC 视图组件和控制器/模型组件。在这种 MVC 中,没有显式使用观察者模式,视图只与控制器交互。View 组件通常在浏览器中执行,向 Controller 组件发送模型更新或模型状态的请求。通常请求是使用 HTTP 协议实现的。这种实现需要使用某种类型的“增强的 HTML 脚本语言”,例如 JSP,它允许自动创建 View 和 Controller 之间的链接。
对不起..我不认为struts 1,struts 2和spring MVC可以作为PUSH MVC ..
因为所有框架都使用在各自的部署描述符中定义的前端控制器[Struts 的 Filer 类和 Spring 的 Controller Listener]。现在,所有这些框架都使用该控制器通过反射将表单数据保存在它们各自的 bean[或模型] 对象中。
现在从我们的动作控制器中,我们可以接收 bean 对象并将获取值,但是在实际生成 bean 对象[或模型]的前端控制器中,使用 request.getParameter(param) 或 request 在其相应字段中设置值。 getParameterValues(param) 内部方法.. 所以这可以被认为是 PULL。
所以根据我的想法,我们可以说这些框架可以使用两层,即最终程序员使用的 PULL 层和框架基类使用的 PUSH 层。