博客
关于我
Android MVC&MVP架构模式的总结
阅读量:625 次
发布时间:2019-03-13

本文共 1540 字,大约阅读时间需要 5 分钟。

MVC(M model View Controller)和MVP(M model View Presenter)是软件开发中的两种常用架构模式,两者在应用开发中各有优势。本文将从基础到应用详细解析这两种模式的特点、组成以及优缺点。

MVC Model View Controller

MVC是一种经典的三层架构模式,主要思想是将应用程序划分为三个相互独立的部分:Model、View和Controller。

MVC的组成与功能

  • Model(模型):

    Model是应用程序的核心部分,承担所有业务逻辑。它负责数据的处理、存储和管理,是整个应用的主体。

  • View(视图):

    View负责生成并管理用户界面。它是应用程序中唯一可以直接与用户交互的部分,接收用户输入并显示处理结果。

  • Controller(控制器):

    Controller作为应用程序的中枢调度,负责根据用户输入控制用户界面显示及Model状态的更新。它不仅负责事件的处理,还负责将业务逻辑与用户界面分开管理。

  • MVC的优缺点

    • 优点:

      • 代码分离:通过将业务逻辑与视图分离,简化了UI更换和定制的工作量。
      • 灵活性:Model、View和Controller可以独立开发和维护,便于扩展和个性化定制。
    • 缺点:

      • 耦合度高:传统MVC中,View和Controller往往耦合紧密,难以实现完全的分离。
      • 复杂性:在实际项目中,Controller往往承担了大量与View相关的逻辑处理,使得代码臃肿。

    MVP Model View Presenter

    MVP是MVC的升级版,通过引入Presenter层,进一步降低了View和Model之间的耦合度。

    MVP的组成与功能

  • Model(模型):

    Model与MVC中的Model一致,负责数据处理和业务逻辑。

  • View(视图):

    View在MVP中与MVC中的View类似,负责生成和管理用户界面。

  • Presenter(展示器):

    Presenter是MVP的核心,负责协调Model和View的交互。它处理用户输入、业务逻辑处理以及UI状态更新。

  • MVP的优缺点

    • 优点:

      • 耦合度降低:Presenter层作为Model和View的中介,降低了两者之间的耦合度。
      • 代码简化:Presenter负责业务逻辑处理,使得View层(如Activity)更加简洁。
      • 更高的可测试性:通过Presenter的引入,提高了组件的可测试性,特别是在单元测试方面。
    • 缺点:

      • 复杂性增加:引入Presenter层后,开发过程中需要更多的接口定义和实现。
      • Activity依然臃肿:即便引入MVP,Activity中仍然可能包含大量与View无关的逻辑处理。

    MVP与MVC的区别

    • MVC与MVP的核心区别:MVC中,Model和View是直接关联的,而MVP中,Model和View之间通过Presenter层进行间接交互。
    • Controller与Presenter的区别:在MVC中,Controller承担了逻辑控制的任务;在MVP中,Presenter承担了更复杂的逻辑处理,包括业务逻辑和UI状态管理。

    MVP的缺点

    尽管MVP在一定程度上解决了MVC的耦合问题,但在实际项目中仍然存在一些问题。例如:

    • Activity依然臃肿:Presenter层的引入并未完全解决Activity中的逻辑处理问题,Activity中仍然可能包含大量与View无关的代码。
    • 开发复杂性:Presenter层的引入增加了接口的数量和复杂性,可能导致开发过程更加繁琐。

    通过对MVC和MVP的对比,可以看出两种架构模式各有特点。在选择架构模式时,开发者需要根据项目需求、开发团队的经验以及项目复杂度进行权衡。

    转载地址:http://ztyoz.baihongyu.com/

    你可能感兴趣的文章
    python3+requests+unittest实战系列【一】
    查看>>
    python3+requests+unittest实战系列【二】
    查看>>
    Python3+Requests+Unittest实战系列【二】
    查看>>
    python3----ASCII
    查看>>
    Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
    查看>>
    Python3-如何自我更新作为服务运行的应用程序
    查看>>
    Python3.1-网格模拟概念性问题
    查看>>
    Python3.12 解决conda环境libstdc++版本过低问题
    查看>>
    python3.2批量查询IP地址区域
    查看>>
    Python3.5中协程和未来/任务之间的区别?
    查看>>
    python3.5实现socket通讯(TCP)
    查看>>
    python3.6 ubuntu部署nginx、 uwsgi、 django
    查看>>
    Python3.6.3中,functools似乎不能用
    查看>>
    python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
    查看>>
    python3.6使用pickle序列化class
    查看>>
    python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
    查看>>
    Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
    查看>>
    python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
    查看>>
    Python3.7安装cv2踩过的坑
    查看>>
    python写txt文件
    查看>>