MVC和MVP的区别

MVC和MVP的区别? MVP如何解决MVC的问题? MVP的优点 MVP的缺点

MVC和MVP的区别?

MVP 是从经典的模式MVC演变而来,它们的 基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 据,View负责显示。作为一种新的模式, MVP与MVC有着一个重大的区别:在MVP中 View并不直接使用Model,它们之间的通信 是通过Presenter (MVC中的Controller)来进 行的,所有的交互都发生在Presenter内部, 而在MVC中View会从直接Model中读取数据 而不是通过 Controller。 在MVC里,View是可以直接访问Model的! 从而,View里会包含Model信息,不可避免 的还要包括一些业务逻辑。

更关注的Model的不变,而同时有多个对 Model的不同显示,及View。所以,在MVC 模型里,Model不依赖于View,但是View是 依赖于Model的。不仅如此,因为有一些业 务逻辑在View里实现了,导致要更改View也 是比较困难的,至少那些业务逻辑是无法重 用的。

MVP如何解决MVC的问题?

在MVP里,Presenter完全把Model和View进 行了分离,主要的程序逻辑在Presenter里实 现。而且,Presenter与具体的View是没有直 接关联的,而是通过定义好的接口进行交 互,从而使得在变更View时候可以保持 Presenter的不变,即重用! 不仅如此,我们 还可以编写测试用的View,模拟用户的各种 操作,从而实现对Presenter的测试--而不需 要使用自动化的测试工具。

Model和View都没有完成时候,就可以通过 编写Mock Object(即实现了Model和View的 接口,但没有具体的内容的)来测试 Presenter的逻辑。 在MVP里,应用程序的 逻辑主要在Presenter来实现,其中的View是

因此就有人提出了Presenter

 很薄的一层。

 First的设计模式,就是根据User Story来首 先设计和开发Presenter。在这个过程中, View是很简单的,能够把信息显示清楚就可 以了。在后面,根据需要再随便更改View, 而对Presenter没有任何的影响了。

现的UI比较复杂,而且相关的显示逻辑还跟 Model有关系,就可以在View和Presenter之 间放置一个Adapter。由这个 Adapter来访问 Model和View,避免两者之间的关联。而同 时,因为Adapter实现了View的接口,从而 可以保证与Presenter之间接口的不变。这样 就可以保证View和Presenter之间接口的简 洁,又不失去UI的灵活性。

View只应该有简单的Set/Get的方法,用户输 入和设置界面显示的内容,除此就不应该有 更多的内容,绝不容许直接访问Model--这 就是与MVC很大的不同之处。

MVP的优点

1、模型与视图完全分离,我们可以修改视图 而不影响模型 2、可以更高效地使用模型,因为所有的交互 都发生在一个地方——Presenter内部 3、我们可以将一个Presenter用于多个视 图,而不需要改变Presenter的逻辑。这个特 性非常的有用,因为视图的变化总是比模型 的变化频繁。 4、如果我们把逻辑放在Presenter中,那么 我们就可以脱离用户接口来测试这些逻辑 (单元测试)

MVP的缺点

由于对视图的渲染放在了Presenter中,所以 视图和Presenter的交互会过于频繁。还有一 点需要明白,如果Presenter过多地渲染了视 图,往往会使得它与特定的视图的联系过于 紧密。一旦视图需要变更,那么Presenter也 需要变更了。比如说,原本用来呈现Html的 Presenter现在也需要用于呈现Pdf了,那么 视图很有可能也需要变更。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值