Arquitectura del proyecto Qt: arquitectura MVC

El patrón MVC representa el patrón Modelo-Vista-Controlador (Model-View-Controller). Este patrón se utiliza para el desarrollo en capas de aplicaciones.

  • Modelo: es la parte de la aplicación que maneja la lógica de datos de la aplicación. Por lo general, los objetos del modelo son responsables de acceder a los datos en la base de datos.
  • Ver (vista) : es la parte de la aplicación que maneja la visualización de datos. Por lo general, las vistas se crean a partir de datos del modelo.
  • Controlador (controlador) - es la parte de la aplicación que maneja la interacción del usuario. Por lo general, el controlador es responsable de leer los datos de la vista, controlar la entrada del usuario y enviar datos al modelo.

Las capas de MVC ayudan a administrar aplicaciones complejas porque puede concentrarse en un aspecto a la vez. Por ejemplo, puede centrarse en el diseño de la vista sin depender de la lógica empresarial. También facilita la prueba de la aplicación.

La estratificación de MVC también simplifica el desarrollo del grupo. Diferentes desarrolladores pueden desarrollar vistas, lógica de controlador y lógica de negocios al mismo tiempo.

Tome el código C ++ como ejemplo para diseñar una demostración de batalla de héroe (Hero). Hero1 ataca a Hero2, Hero2 pierde sangre continuamente y la interfaz de usuario se actualiza sincrónicamente. Las tres clases principales son Hero (clase de datos de héroe), HeroView (clase de interfaz de usuario de héroe, como la barra de sangre) y HeroController (clase de controlador de héroe, clase de gestión de héroe).

Los beneficios de este artículo, gratis para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, que incluye (base del lenguaje C ++, introducción a la programación Qt, mecanismo de señal y ranura QT, dibujo de imagen de desarrollo de interfaz QT, red QT, programación de base de datos QT, QT proyecto de combate, QSS, OpenCV, módulo rápido, preguntas de la entrevista, etc.) ↓↓↓↓↓↓Ver abajo↓↓Haga clic en la parte inferior del artículo para recibir la tarifa↓↓

La clase de héroe:

#pragma once 
 
class Hero
{
public:
    Hero();
    ~Hero();
    //be attacked
    void beAttack(int att);
    //is dead?
    bool dead() { return m_nHp == 0; }
    public:
    //set no
    void setNo(std::string no) { m_sNo = no; }
    //get no
    std::string getNo() { return m_sNo; }

    //set name
    void setName(std::string name) { m_sName = name; }
    //get name
    std::string getName() { return m_sName; }

    //get hp
    void setHp(int hp) { m_nHp = hp; }
    //set hp
    int getHp() { return m_nHp; }

    //set att
    void setAtt(int att) { m_nAtt = att; }
    //get att
    int getAtt() { return m_nAtt; }
private:

    std::string m_sName;//姓名
    std::string m_sNo;//游戏场号码

    int m_nHp;//血量
    int m_nAtt;//攻击力
};
#include "stdafx.h"
#include "Hero.h"

//ctor
Hero::Hero()
{
}

//Destructor
Hero::~Hero()
{
 
}
 
void Hero::beAttack(int att)
{
    if (att <= 0) throw "Att Number <= 0";//safe check
    m_nHp -= att;
    m_nHp = m_nHp < 0 ? 0 : m_nHp;//safe check
}

La clase HeroView:

#pragma once
class HeroView
{
public:
    HeroView();
    ~HeroView();

    //show hero UI data;
    void show(string no, string name,int att, int hp);
    //show hero dead UI;
    void dead(string no, string name);
    //show heor winned UI;
    void winned(string no, string name);
    private:
    //Hero* m_hero;
};
#include "stdafx.h"
#include "HeroView.h"

HeroView::HeroView()
{
}

HeroView::~HeroView()
{
}

void HeroView::show(string no,string name, int att, int hp)
{
    cout << "Hero info:"<<"(no:"<<no<<",name:"<<name<<",att:"<<att<<",hp:"<<hp<<")" << endl;
}

void HeroView::dead(string no, string name)
{
    cout << "Hero Dead:" << "(no:" << no << ",name:"<<name << ")" << endl;
}

void HeroView::winned(string no, string name)
{
    cout << "Hero Winned:" << "(no:" << no << ",name:" << name << ")" << endl;

}

La clase HeroController:

#pragma once
class HeroController
{
public:
      HeroController(string no, string name);
      ~HeroController();
      void setHeroHp(int hp);//set hero hp
      void setHeroAtt(int att);//set hero att
      void show();//show hero info
      void beAttack(int att);//be attacked by hero
      void dead();//dead
      void winned();//winned

     Hero* getHero() { return m_hero; }//get hero
 
private:
     Hero * m_hero;//hero
     HeroView * m_heroView;//hero view
};
#include "stdafx.h"
#include "HeroController.h"
 
HeroController::HeroController(string no, string name)
{
    m_heroView = new HeroView();
    m_hero = new Hero();
    m_hero->setNo(no);
    m_hero->setName(name);
}

HeroController::~HeroController()
{
}

void HeroController::setHeroHp(int hp)
{
    m_hero->setHp(hp);
}

void HeroController::setHeroAtt(int att)
{
    m_hero->setAtt(att);
}

void HeroController::show()
{
    m_heroView->show(m_hero->getNo(), m_hero->getName(),m_hero->getAtt(), m_hero->getHp());
}

void HeroController::beAttack(int att)
{
    m_hero->beAttack(att);
}

void HeroController::dead()
{
    m_heroView->dead(m_hero->getNo(),m_hero->getName());
}

void HeroController::winned()
{
    m_heroView->winned(m_hero->getNo(), m_hero->getName());
}

Pruebas principales():

// ConsoleApplication_C++1.cpp: 主项目文件。
  
#include "stdafx.h"

using namespace System;

int main()
{
    //初始化一个英雄的控制器
    HeroController* controller = new HeroController("2017","孟栋");
    //设置血量100
    controller->setHeroHp(100);
    controller->setHeroAtt(40);
    //显示一下血量
    controller->show();

    //初始化第二个英雄的控制器
    HeroController* controller2 = new HeroController("2016", "黑魔王");
    //设置血量100
    controller2->setHeroHp(200);
    //设置攻击力20
    controller2->setHeroAtt(20);
    //显示一下血量
    controller2->show();

    //hero1 attack hero2
    controller2->beAttack(controller->getHero()->getAtt());
    //ui更新
    controller2->show();

    //如果没有dead,就一直攻击
    while (!controller2->getHero()->dead())
    {
        //hero1 attack hero2
        controller2->beAttack(controller->getHero()->getAtt());
        //ui更新
        controller2->show();
    }

    controller2->dead();
    controller->show();
    controller->winned();

    return 0;
}

La salida de la consola es la siguiente:

Hero info : (no:2017, name : 孟栋, att : 40, hp : 100)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 200)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 160)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 120)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 80)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 40)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 0)
Hero Dead : (no : 2016, name : 黑魔王)
Hero info : (no : 2017, name : 孟栋, att : 40, hp : 100)
Hero Winned : (no : 2017, name : 孟栋)

 Los beneficios de este artículo, gratis para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, que incluye (base del lenguaje C ++, introducción a la programación Qt, mecanismo de señal y ranura QT, dibujo de imagen de desarrollo de interfaz QT, red QT, programación de base de datos QT, QT proyecto de combate, QSS, OpenCV, módulo rápido, preguntas de la entrevista, etc.) ↓↓↓↓↓↓Ver abajo↓↓Haga clic en la parte inferior del artículo para recibir la tarifa↓↓

Supongo que te gusta

Origin blog.csdn.net/QtCompany/article/details/131584355
Recomendado
Clasificación