博客
关于我
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/

    你可能感兴趣的文章
    NOTE:rfc5766-turn-server
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad++正则表达式替换字符串详解
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notes on Paul Irish's "Things I learned from the jQuery source" casts
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    NotImplementedError: Could not run torchvision::nms
    查看>>
    nova基于ubs机制扩展scheduler-filter
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    np.power的使用
    查看>>
    NPM 2FA双重认证的设置方法
    查看>>
    npm build报错Cannot find module ‘html-webpack-plugin‘解决方法
    查看>>
    npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法
    查看>>
    npm build报错Cannot find module ‘webpack‘解决方法
    查看>>