Le modèle MVC représente le modèle Modèle-Vue-Contrôleur (Modèle-Vue-Contrôleur). Ce modèle est utilisé pour le développement en couches d'applications.
- Modèle - est la partie de l'application qui gère la logique des données de l'application. Habituellement, les objets de modèle sont responsables de l'accès aux données dans la base de données.
- Afficher (voir) - est la partie de l'application qui gère l'affichage des données. Généralement, les vues sont créées à partir des données du modèle.
- Contrôleur (contrôleur) - est la partie de l'application qui gère l'interaction de l'utilisateur. En règle générale, le contrôleur est responsable de la lecture des données à partir de la vue, du contrôle des entrées de l'utilisateur et de l'envoi des données au modèle.
La superposition MVC permet de gérer des applications complexes car vous pouvez vous concentrer sur un aspect à la fois. Par exemple, vous pouvez vous concentrer sur la conception des vues sans vous fier à la logique métier. Cela facilite également le test de l'application.
La superposition MVC simplifie également le développement de groupe. Différents développeurs peuvent développer des vues, une logique de contrôleur et une logique métier en même temps.
Prenez le code C++ comme exemple pour concevoir une démo de bataille de héros (Hero). Hero1 attaque Hero2, Hero2 perd du sang en continu et l'interface utilisateur est mise à jour de manière synchrone. Les trois principales classes sont Hero (classe de données de héros), HeroView (classe d'interface utilisateur de héros, telle que la barre de sang) et HeroController (classe de contrôleur de héros, classe de gestion de héros).
Les avantages de cet article, gratuit pour recevoir le package de matériel d'apprentissage du développement Qt, vidéo technique, y compris (base du langage C++, introduction à la programmation Qt, signal QT et mécanisme de slot, dessin d'image de développement d'interface QT, réseau QT, programmation de base de données QT, QT project combat, QSS, OpenCV, Quick module, interview questions, etc.)
La classe Héros :
#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 classe 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 classe 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());
}
test principal() :
// 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 sortie de la console est la suivante :
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 : 孟栋)
Les avantages de cet article, gratuit pour recevoir le package de matériel d'apprentissage du développement Qt, vidéo technique, y compris (base du langage C++, introduction à la programmation Qt, signal QT et mécanisme de slot, dessin d'image de développement d'interface QT, réseau QT, programmation de base de données QT, QT project combat, QSS, OpenCV, Quick module, interview questions, etc.)