# 23-使用MVP架构编写Qt应用程序

一、简要概述

  1. MVP是由MVC发展而来,总体目的与作用相同。都是为了软件构架有层次之分,使得核心逻辑、界面控制、数据这三者分层清晰明了。减少了三者之间的逻辑耦合与功能耦合。也是的代码清晰易读。从而减少因写代码造成的bug。也增加了软件整体的稳定性。
  2. 写大型一些的软件一般都要按功能模块化。一个软件由多个独立模块组成,这样做的优点如下:
  • 模块功能相对独立
  • 便于多人协作开发。
  • 模块也可以在其他项目复用。
  • 也便于模块单独开源等
  • 模块实现接口并对外提供接口(保证模块可以单独更新)
  1. 而MVP/MVC等架构是在模块化的基础上,给所有模块分成三个或多个层面。构架给所有模块提供了清晰明了的分类。使得软件整体构架清晰易懂。便于开发者之间合作以及新成员快速上手。

二、适用场合

  1. MVP/MVC等架构的出现与发展都是为了解决大型软件中界面逻辑代码与功能逻辑代码相混合而产生的。而为了实现MVP/MVC等架构的时候,就需要在基本的代码中加入构架相关的代码。因此不适用于简单的工具类软件使用。比如做一个基础的“串口小助手工具”如果使用了MVP/MVC等架构,代码看起来反而复杂了。而在稍大一些软件中,使用MVP/MVC等架构,则可以带来“磨刀不误砍材功”体验。

三、MVP/MVC架构原理

前面提到使用这个架构主要目的就是把“界面逻辑代码”、“功能逻辑代码”、“提供数据的代码”这三者分成三个层次。这三个层次与MVP/MVC构架的关系如下:
M :Model :提供数据的代码
V : View :界面逻辑代码
C :Controler :功能逻辑代码
P :Presenter :功能逻辑代码

MVC
# 23-使用MVP架构编写Qt应用程序_第1张图片
1.View 传递用户交互到Controller
2.Controller处理对应的逻辑,并把处理后的结果修改到model
3.Model将修改后的数据,发送到View进行展示,用户看到操作后的反馈
特点:
1.所有通信都是单向的,
2.三者虽然分开为独立的块,但是分层不够完全。因此也比较灵活,使用与web中开发使用。

MVP
# 23-使用MVP架构编写Qt应用程序_第2张图片
1.View 传递用户交互到Presenter
2.Presenter处理对应逻辑,把处理结果写入model,然后从model读取修改后的数据
3.Presenter把处理后的结果或信息反馈给View
特点:
1.把view界面和model完全隔离开来,通过中间层Presenter传递
2.各部分之间都是双向通信
3.view的代码非常精简,只接收用户输入和显示,主要逻辑都放在了Presenter

参考:MVC,MVP 和 MVVM 的图示

四、重构为MVP框架

在你开发的时候把逻辑代码和界面代码写到了一块了,现在想要重构,把两者分开,但是不想对现有的类的继承关系做出更改。这样的场景非常适合使用mvp
重构,只需要在现有类 添加新的父类(c++)或实现接口(Java),从而扩展现有的类的功能。

五、MVP/MVC架构的典型代码示例

注意:这里用了一个简单的“增加”和“减小”按钮来举例说明怎样使用mvp框架。因此看起来代码比较啰嗦。还不如去掉mvp框架代码,直接把逻辑代码和页面代码写在一块。 这里要说明的是,这个使用体验正是表明这个mvp框架仅适用于你的页面和逻辑代码很臃肿的情况。
当你的一个功能页面所对应的代码比较臃肿的情况下,使用mvp框架可以得到如下优点:

  1. 可以把逻辑代码和页面代码完全分开
  2. 页面代码可以随时灵活修改和替换,方便随时重构页面
  3. 方便在一个页面实现(可切换的)不同布局
  4. 降低单个源代码文件的行数

Qt平台下示例代码(C++)
下载地址如下:
https://download.csdn.net/download/robert_cysy/12087373

你可能感兴趣的:(Qt)