(原文: http://www.guyrutenberg.com/2008/04/26/pull-vs-push-mvc-architecture/)
在 MVC 中的 Push , Pull 主要是用来描述 View 和 Controller 之间的关系。
Push 模式, controller 来解析用户的行为并且产生相应的数据,并将数据推送到 view 中。
Pull 模式,这个模式假设用户需要某种 output ,例如一组数据库中的列表信息, view 层将访问 controller 以获得数据,并最终将数据展示给相应的用户。这看起来更像是从 controller 中把数据拉出来。
大多数的 web 框架只是实现了一种模式,因为乍一看,两种模式都可以满足用户各类需求。但实际上在某些情况下,二选一的决定才是最合适的。
例如,用户希望执行某个特别的动作,好比新增一条回复,他最关心的是这个动作被执行,而对于是否新增成功的反馈信息如何展示并不那么关心。对于开发者来说,希望用户发起一个特别的动作后,会在众多的 controller 中有一个特别的方法可以被 map 到。当某个 controller 在把 action 带的执行结果 push 到 view 时,对应的 view 并不关心到底是谁把数据 push 过来。所以这种情况下, push 模式就更加合适,因为用户的行为被框架解析到一个特别的 controller 来处理,并且 controller 负责把数据 push 到 view 中。
Pull 当然也有其适应的场合。试想用户希望获取客户及客户购买商品的列表,用户希望特别的 output 。最好的解决方案是将用户的请求交给 view 处理,然后由 view 利用不同的 controller 来产生用户期望的 output (一个 controller 用来处理 customer 列表,一个 controller 用来处理商品列表 )。那么此类用户请求的处理方式就是通过 view 从 controller 中把数据 pull 出来完成的。
诚然,上述两个例子都可以通过另外一个模式来实现,但那个样做会比较复杂。总的来说, push 在处理用户请求的任务时比 pull 要更合适一些,而 pull 在处理用户对数据展示的请求时较 push 更强力些。