图片引用于百度
简介:MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
优点:分工明确,通过MVC模式可以把数据库的开发,程序业务逻辑开发以及页面开发分开,这样方便后期的代码维护,也使的程序员之间分工更加明确。重用性高,多个视图共享一个模型
缺点:没有明确的定义,完全理解它是很困难的因为它的内部原理比较复杂所以得花时间去学习理解。降低系统的性能。由于模型和视图要严格分离,这样给调试增添了困难
例子背景:模拟从数据库读取用户账号信息并输出
MVC模式代码:
- Model类:
#pragma once
#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct UserInfo
{
string userName;
string passWord;
string name;
};
class UserModel
{
public:
UserModel() = default;
private:
vector<UserInfo> m_userInfo;
public:
void addUserInfo(const UserInfo& info)
{
m_userInfo.push_back(info);
}
UserInfo& at(int idx)
{
return m_userInfo[idx];
}
int size()
{
return (int)m_userInfo.size();
}
};
- View类:
#pragma once
#include "Model.h"
class OutView
{
public:
OutView() = default;
public:
void PrintUserInfo(const UserInfo& info)
{
cout << "账号:" << info.userName << " 密码:" << info.passWord << " 名字:" << info.name << endl;
}
};
- Controller类:
#pragma once
#include "View.h"
class UserController
{
private:
UserModel* m_model;
OutView* m_view;
public:
UserController(UserModel* model, OutView* view) : m_model(model), m_view(view) {}
public:
void addUserInfo(const UserInfo& info)
{
m_model->addUserInfo(info);
}
UserInfo& at(int idx)
{
return m_model->at(idx);
}
void PrintAllUserInfo()
{
for (int i = 0; i < m_model->size(); ++i)
{
m_view->PrintUserInfo(m_model->at(i));
}
}
};
- 引用:
#include "Controller.h"
#include <time.h>
//模拟从数据库或本地读数据
UserModel* CreateModel()
{
srand((unsigned int)time(NULL));
int len = rand() % 100;
UserModel* ret = new UserModel;
for (int i = 0; i < len; ++i)
{
UserInfo tmpInfo;
char tmp[256] = { 0 };
sprintf_s(tmp, "%d%d%d%d%d%d", rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10);
tmpInfo.userName.append(tmp);
memset(tmp, 0, 256);
sprintf_s(tmp, "%d%d%d%d%d%d%d%d", rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10, rand() % 10);
tmpInfo.passWord.append(tmp);
memset(tmp, 0, 256);
sprintf_s(tmp, "%d%d%d", rand() % 10, rand() % 10, rand() % 10);
tmpInfo.name.append(tmp);
ret->addUserInfo(tmpInfo);
}
return ret;
}
int main()
{
auto model = CreateModel();
auto view = new OutView;
auto control = new UserController(model, view);
control->PrintAllUserInfo();
getchar();
return 0;
}
总结:
MVC模式:通过将视图输出和数据之间的分离,使得各个模块各施其职,互不干涉,项目将更容易维护,并且具有移植性,因为模型是分离开的,移到新平台只需要更新控制器和视图就可以了,最大化重用代码。
作者:丶梦爱
博客:https://blog.csdn.net/u014732297(转载请说明出处)