多语言展示
当前在线:1863今日阅读:19今日分享:20

MVC和MVP调研

一、 MVC与MVPMVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。两个模式是关于怎么将数据从用户接口(view)中分离出来,以及用户接口如何与数据进行交互的。模型(Model)表示数据模型和业务逻辑。它代表着一类组件或类,这些组件或类可以向外部提供数据,同时也能从外部获取数据并将这些数据存储在某个地方。视图(View)将数据呈现给用户。一般的视图都只是包含用户界面(UI),而不包含界面逻辑。视图可以从模型中读取数据,但是不能修改或更新模型。     层现器(Presenter)/控制器(Controller)包含了根据用户在视图中的行为去更新模型的逻辑。(1)MVC                                             从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的。从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,既View。这种设计模式关键的优势在于各种组件都是松散结合的。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。“主动—MVC”模式,也是通常意义下的MVC模式 说是主动的是因为View不是等Controller通知它Model更新了然后才从Model取数据并更新显示,而是自己监视Model的更新或主动询问Model是否更新。“被动—MVC”模式 与主动MVC的区别在于:1、模型对视图和控制器一无所知,它仅仅是被它们使用2、控制器使用视图,并通知它更新数据显示3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做4、控制器负责处理模型数据的变化5、控制器可以包含对视图的渲染逻辑(2)MVP在MVP里,Presenter完全把Model和View进行了分离,他们通过Presenter进行交互,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变。在MVP里,应用程序的逻辑主要在Presenter来实现,其中的View是很薄的一层。在MVP模式里,View只有简单的Set/Get的方法,用户输入和设置界面显示的内容,除此就不应该有更多的内容,绝不容许直接访问Model--这就是与MVC很大的不同之处。二、 MVC与MVC的区别MVP与MVC最大的一个区别就是“Model与View层之间到底该不该通信(甚至双向通信)。Model在MVC架构中起的作用非常重要,它才是UI业务逻辑真正的实现层。所以Model实际上是业务模型。MVC的View直接与Model打交道,而Controller仅仅起一个“桥梁”作用,它负责把View的请求转发给Model,再负责把Model处理结束的消息通知View,不传递数据(业务结果),而是由View直接向Model拿数据。Controller就是一个消息分发器。Controller是为了让UI与逻辑分离(界面与代码分离)。MVP的View不与Model直接联系,所有的请求、结果通知、数据传递都是通过Presenter转发,View和Model彼此不知道对方的存在。在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。MVC模式的好处:1.各施其职,互不干涉,低耦合性在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。 2.有利于开发中的分工在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。3. 较低的生命周期成本MVC使开发和维护用户接口的技术含量降低。4. 快速的部署使用MVC模式使开发时间得到相当大的缩减,它使程序员集中精力于业务逻辑,界面程序员集中精力于表现形式上。5.可维护性分离视图层和业务逻辑层也使得WEB应用更易于维护和修改MVP模式的优势:1、模型与视图完全分离,我们可以修改视图而不影响模型2、可以更高效地使用模型,因为所以的交互都发生在一个地方——Presenter内部。3、我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)MVP的问题:由于对视图的渲染放在了Presenter中,所以视图和Persenter的交互会过于频繁。还有就是如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么 Presenter也需要变更了。三、 MVC与MVP的相同点无论是MVC还是MVP,View和Controller都是紧密联系的。MVC/MVP都是通过“通知”机制来解决View和Controller的交互。四、MVC/MVP框架的设计在MVP框架里,用Presenter代替MVC的Controller,而且View不再与Model交互。1. Presenter/ControllerPresenter的作用比Controller大得多,Controller只是一个纯粹的消息分发器,而Presenter还负责传递Model的处理结果给View,并指导View的渲染。注意,渲染我理解为UI的展现方式。2. Presenter与ModelPresenter与Model使用接口隔离,Presenter直接调用Model的接口方法五、 Controller/Presenter的意义。C/P存在的意义是为了解耦View和Model。如果C/P不存在的话,View就直接访问Model,而View的变化是频繁的,不同的系统,View的展现方式不一样,让Model去控制View的渲染,会降低Model的重用性。
推荐信息