C++25设计模式之MVC模式

在这里插入图片描述
图片引用于百度

简介: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(转载请说明出处)

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值