什么是MVP? MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP从MVC演变而来,通过表示器将视图与模型巧妙地分开。在该模式中,视图通常由表示器初始化,它呈现用户界面(UI)并接受用户所发出命令,但不对用户的输入作任何逻辑处理,而仅仅是将用户输入转发给表示器。通常每一个视图对应一个表示器,但是也可能一个拥有较复杂业务逻辑的视图会对应多个表示器,每个表示器完成该视图的一部分业务处理工作,降低了单个表示器的复杂程度,一个表示器也能被多个有着相同业务需求的视图复用,增加单个表示器的复用度。表示器包含大多数表示逻辑,用以处理视图,与模型交互以获取或更新数据等。模型描述了系统的处理逻辑,模型对于表示器和视图一无所知。
MVC和MVP的区别? 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。MVP则是对MVC的进一步改造,以Andorid为例,实际上在MVC中很难区分Activity到底应该处于V还是C的角色,因为activity即包含了界面也包含了一部分逻辑处理。 MVP的出现就是为进一步分离业务逻辑和界面处理。在MVP中,M与V完全切断联系,由P进行总控。 当V接收到了操作,将相应的请求传递到P,由P进行业务处理以及与M进行交互,同时P又在恰当的时机对view进行更新(接口 / 回调方法 / 事件) 这样V只需要暴露出接口,V与P通过接口通讯,一方面能够将业务逻辑转移至P,一方面通过接口使得P可以适配多个V。 在MVP模式里,View只应该有简单的Set/Get方法,用户输入和设置显示的内容,除此不应该有更多的内容,绝不允许直接访问Model,这就是与MVC最大的不同之处。