Qt数据和视图分离——中MCV和MVVM

智能指针

  • 一、背景知识
  • 二、命令式编程 vs 声明式编程
    • 2.1 命令式编程(Imperative Programming)
    • 2.2 声明式编程(Declarative Programming)
  • 三、 MVC(Model-View-Controller)
    • 3.1 模型(Model)
    • 3.2 视图(View)
    • 3.3 控制器(Controller)
    • 3.4 MVC 工作流程
    • 3.5 总结
  • 四、 MVVM(Model-View-ViewModel)
    • 4.1 模型(Model)
    • 4.2 视图(View)
    • 4.3 视图模型(ViewModel)
    • 4.5 MVVM 工作流程
    • 4.6 总结
  • 五、 MVC vs MVVM
    • 5.1 MVC(模型-视图-控制器)
    • 5.2 MVVM (模型-视图-视图模型)在Qt中的使用
    • 5.3 区别总结

一、背景知识

回忆我们最初学Qt的时候,经常通常都是在一个文件中,创建很多控件,然后在当前文件中处理该控件,包括信号槽的处理,控件的变化等等…我们最初用的就是所谓的命令式编程 也就是MVC
随着我们的项目愈发庞大,我们发现,我们的代码越来越难以维护,并且出现的bug很难定位,俗称(屎山),后面我们了解到声明式编程 也就是MVVM

二、命令式编程 vs 声明式编程

2.1 命令式编程(Imperative Programming)

命令式编程是一种通过一系列指令命令来改变程序状态的范式。开发者需要显式地描述如何进行某些操作,通常通过控制流(如条件语句、循环等),逐步指示计算机完成任务。这种方式强调“如何做”。

️️特点:

  • 步骤驱动:开发者需要明确每个操作步骤。
  • 状态管理:程序的状态在每一步变化中逐渐改变。
  • 控制流:使用条件和循环来控制程序的执行顺序。

根据以下实例,我们通过信号和槽直接处理用户的点击事件,通过显式地调用方法来更新UI

#include   
#include   
#include   
#include   
#include   

int main(int argc, char *argv[]) {
     
    QApplication a(argc, argv);  

    QWidget window;  
    QVBoxLayout layout(&window);  
    
    QLabel label("Hello, World!");  
    QPushButton button("Change Text");  

    layout.addWidget(&label);  
    layout.addWidget(&button);  

    // 命令式风格  
    QObject::connect(&button, &QPushButton::clicked, 

你可能感兴趣的:(C++,设计模式,qt,开发语言)