• MVP框架模式


    一、基本概念

    MVP是Model-View-Presenter的简称,即模型-视图-表现层的缩写。MVP是由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题。
    与MVC一样,MVP将应用程序的数据处理、数据显示和逻辑控制分开,用一种业务逻辑、数据显示和界面相分离的方法组织代码。

    二、MVP与MVC的比较(以Android开发为例)




    MVP与MVC相比,MVP减少了Activity的职责,简化了Activity的代码,将复杂的逻辑代码提取到了Presenter中进行处理。Presenter的出现,将Activity视为View层,Presenter负责完成View层与Model层的交互。与之对应的好处就是:程序耦合度更低,更加方便地进行测试,程序可扩展性大大提高。
    MVP从MVC演化而来,它们的基本思想有相通的地方。Controller与Presenter负责逻辑的处理,Model提供数据,View负责显示数据。MVP作为一个新的模式,与MVC有一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部;而在MVC中View会直接从Model读取数据。
    MVP解决了MVC问题:
    在MVP中,Presenter完全把View与Model进行分离,主要的程序逻辑在Presenter实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View层的时候可以保持Presenter不变。不仅如此,我们还可以编写测试用的View,模拟用户的操作,从而实现对Presenter的测试——而不需要使用自动化的测试工具。
    MVP中的View层是很薄的一层,View只应该有简单的set/get方法、用户输入和界面显示的内容,除此之外不应该有更多的内容,绝不允许直接访问Model——这就是MVP与MVC的很大不同之处。

    三、MVP的工作原理和结构

     

    1、模型(Model)

    模型表示业务逻辑和实体模型,提供数据给Presenter。

    2、视图(View)

    视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接受用户的输入数据,但它不进行任何实际的业务处理。

    3、表现层(Presenter)

    应用程序主要的程序逻辑在Presenter内实现,而且Presenter将Model和View完全分离,所有的交互都发生在Presenter内部,具体业务逻辑全部交由Presenter接口实现类中进行处理。

    四、MVP的优点

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

    五、MVP的缺点

    由于对View的操作放在了Presenter中,所以View和Presenter的交互会过于频繁。如果Presenter过多地操作视图,往往会使得它与特定的 View联系过于紧密。一旦视图需要改变,那么Presenter也需要改变。

    MVP模式demo下载:http://download.csdn.net/download/qq_33721382/10164979

    参考资料:

    http://blog.csdn.net/dantestones/article/details/51445208

    http://blog.csdn.net/lmj623565791/article/details/46596109

    https://baike.baidu.com/item/MVP/3714550

  • 相关阅读:
    ZJNU 1138
    ZJNU 1133
    架构设计:系统存储(21)——图片服务器:详细设计(1)
    架构设计:系统存储(20)——图片服务器:需求和技术选型(2)
    架构设计:系统存储(19)——图片服务器:需求和技术选型(1)
    架构设计:系统存储(18)——Redis集群方案:高性能
    大端模式和小端模式
    阶段性纠错邀请
    架构设计:系统存储(17)——Redis集群方案:高可用
    Android深入浅出之Binder机制
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10307261.html
Copyright © 2020-2023  润新知