MVC基础概念及相应代码示例

(旧的)代码实现方法

        一个功能模块的代码逻辑(显示处理,数据处理,逻辑判定)都写在一起(耦合)

(新的)代码MVC分层实现方法

        显示部分实现(View视图)

        数据处理实现(Model数据模型)

        逻辑判定实现(Controller控制器)

    图片来源:视频课程截图 

MVC是什么:

        C:控制器,负责流程控制和事件响应

        V:视图,负责图形交互

        M:数据模型,负责数据处理

MVC的开发步骤:

        1.页面预制体制作

        2.处理数据(数据模型脚本)

                JSON读写操作

                数据的CURD操作

                        C:Create增加数据

                        U:Update修改数据

                        R:Read读取数据

                        D:Delete删除数据

                根据控制器调用模型的方式数量,在模型中编写对应数量的函数,以供调用

        3.显示(视图脚本)

                文本的显示

                图片的显示

                列表的显示

                其他美术资源(模型,动作特效)

        4.逻辑控制(控制器脚本)

                生命周期函数

                逻辑控制语句

                事件响应

使用MVC分层开发思想的示例代码:

using UnityEngine;
using UnityEngine.UI;
using LitJson;
using System.IO;//原无MVC开发思想代码
public class UIMainMenu:MonoBehaviour{private Text GoldCount;public void Start(){//找到Text子物体GoldCount=transform.Find("HeaderCount/Gold/Count").GetComponent<Text>();//通过路径找子物体transform.Find("HeaderCount/Gold/Add").GetComponent<Button>().onClick.AddListener(GoldAddClick);//将JSON文件中的数据,读取出来,显示在页面上//进入页面,就检查JSON文件是否存在if(!File.Exists(Config.UserNumericalJsonFile)){//处理JSON数据JsonData d = new JsonData();d["GoldCount"]=0;File.WriteAllText(Config.UserNumericalJsonFile,d.ToJson());}else{//将已有的数据读取出来,并显示在UI上string json=File.ReadAllText(Config.UserNumericalJsonFile)JsonData d=JsonMapper.ToObject(json);GoldCount.text=d["GoldCount"].ToString();}}public void GoldAddClick(){//读取数据string json=File.ReadAllText(Config.UserNumericalJsonFile);JsonData d = JsonMapper.ToObject(json);//增加金币数1d["GoldCount"]=(int)d["GoldCount"]+1;//更新显示部分(Text)GoldCount.text=d["GoldCount"].ToString();//更新JSON数据(JSON)File.WriteAllText(Config.UserNumericalJsonFile,d.ToJson());}
} using System.Collections;
using System.Collections.Generic;
using UnityEngine;public static class Config
{public static string UserNumericalJsonFile=Application.persistentDataPath+"/UserNumerical.json"; 
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;//模型层
public static class UserDataModel
{//创建新的用户数据public static void CreateNew(){if(!File.Exists(Config.UserNumericalJsonFile)){//处理JSON数据JsonData d = new JsonData();d["GoldCount"]=0;File.WriteAllText(Config.UserNumericalJsonFile,d.ToJson());}}//读取用户数据public static JsonData ReadAllData(){//将已有的数据读取出来,并显示在UI上string json=File.ReadAllText(Config.UserNumericalJsonFile)return JsonMapper.ToObject(json);}//更新金币数public static JsonData UpdateGold(int count){//获取原来json文件中的值string json=File.ReadAllText(Config.UserNumericalJsonFile);JsonData d = JsonMapper.ToObject(json);d["GoldCount"]=(int)d["GoldCount"]+1;File.WriteAllText(Config.UserNumericalJsonFile,d.ToJson());return d;}
using Sytem.Collections;
using Sytem.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using LitJson;//控制器层
public class UIMainMenuController:MonoBehaviour
{private UserNumericalView View;public void Start(){View=transform.Find("HeaderCount").GetComponent<UserNumericalView>();View.Init();//通过路径找子物体transform.Find("HeaderCount/Gold/Add").GetComponent<Button>().onClick.AddListener(GoldAddClick);UserDataModel.CreateNew();JsonData d = UserDataModel.ReadAllData();View.Refresh(d);}public void GoldAddClick(){JsonData d = UserDataModel.UpdateGold(1);View.Refresh(d);}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using LitJson;//视图层
public class UserNumericalView:MonoBehaviour
{private Text GoldCount;public void Init(){//找到Text子物体GoldCount=transform.Find("Gold/Count").GetComponent<Text>();}public void Refresh(JsonData data){GoldCount.text=data["GoldCount"].ToString();}
}

以上代码仅供帮助理解MVC开发思想,未提供对应的UI各物体挂载及摆放,如想实践,自取代码进行相应修改调试 。

该系列专栏为网课课程笔记,仅用于学习参考。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx优化(持续更新!!!)

1.调整文件描述符 # 查看当前系统文件描述符限制 ulimit -n# 永久修改文件描述符限制 # 编辑 /etc/security/limits.conf 文件&#xff0c;添加以下内容 * soft nofile 65535 * hard nofile 65535# 编辑 /etc/sysctl.conf 文件&#xff0c;添加以下内容 fs.file-max 655352.调…

apache连接池机制讨论

apache连接池的连接有效性 server一般会配置keep-alive超时时间&#xff0c;过了这个时间还没新请求到来&#xff0c;则关闭连接。客户端从连接池里拿出连接时&#xff0c;会检查一下连接是否已关闭&#xff0c;如已关闭&#xff0c;会丢弃掉该连接&#xff0c;并尝试从连接池…

【QT5 多线程示例】条件变量

文章目录 条件变量使用 wakeOne()使用 wakeAll() 条件变量 QT的条件变量类是QWaitCondition&#xff0c;有wakeOne() 和 wakeAll() 两个方法 wakeOne()&#xff1a;仅唤醒一个等待的线程。wakeAll()&#xff1a;唤醒所有等待的线程。 使用 wakeOne() https://github.com/Bi…

备赛蓝桥杯之第十六届模拟赛第1期职业院校组第四题:世纪危机(人口增长推算)

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

OpenBMC:BmcWeb 生效路由2 Trie字典树

OpenBMC:BmcWeb 生效路由1 基于method分类路由_openbmc web-CSDN博客 可以看到,在internalAdd中: std::vector<BaseRule*> rules; rules.emplace_back(ruleObject); trie.add(rule, static_cast<unsigned>(rules.size() - 1U)); ruleObject首先被放入了每个meth…

Appium中元素定位之一组元素定位API

应用场景 和定位一个元素相同&#xff0c;但如果想要批量的获取某个相同特征的元素&#xff0c;使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似&#xff0c;但它们返回的是一个元素列表&#xff08;List<MobileElement>&am…

第五周日志-重新学汇编(2)

机器语言 汇编语言(直接在硬件上工作——硬件系统结构&#xff09;&#xff1a; 1.机器语言 每一种微处理器硬件设计和内部结构不同&#xff08;决定了电信号不同&#xff0c;进而需要不同的机器指令&#xff09; #早期通过纸带机/卡片机输入计算机&#xff0c;进行运算 2…

【9】Strongswan collections —— enumerator

//以目录枚举为例子&#xff0c;说明enumerator&#xff0c;从源码剥离可运行 #include <stdio.h> #include <stdbool.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h&…

谈谈对spring IOC的理解,原理和实现

一、IoC 核心概念 1. 控制反转&#xff08;Inversion of Control&#xff09; 传统编程中对象自行管理依赖&#xff08;主动创建&#xff09;&#xff0c;而IoC将控制权转移给容器&#xff0c;由容器负责对象的创建、装配和管理&#xff0c;实现依赖关系的反向控制。 2. 依赖…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…

甘肃旅游服务平台+论文源码视频演示

4 系统设计 4.1系统概要设计 甘肃旅游服务平台并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的小程序结构&am…

路由选型终极对决:直连/静态/动态三大类型+华为华三思科配置差异,一张表彻底讲透!

路由选型终极对决&#xff1a;直连/静态/动态三大类型华为华三思科配置差异&#xff0c;一张表彻底讲透&#xff01; 一、路由&#xff1a;互联网世界的导航系统二、路由类型深度解析三者的本质区别 三、 解密路由表——网络设备的GPS华为&#xff08;Huawei&#xff09;华三&a…

【RAG综述系列】之 RAG 相关背景和基本原理

系列文章&#xff1a; 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文&#xff1a; 检索增强生成&#xff08;Retrieval-Augmented Gen…

CMake 构建的Qt 项目中的构建套件的配置

在Qt 框架中&#xff0c;使用CMake 构建工具时&#xff0c;需要自己给构建套件添加相关配置&#xff0c;否则已经添加的构建套件将不可选择使用。 创建CMake 项目后&#xff0c;如果打开项目配置时&#xff0c;出现如下构建套件不可选的情况&#xff0c; 需要先确认是否安装…

本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo

写在前面 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1实现 K8s运维文档检索与问答系统 Demo通过 Demo 对 LEDVR 工作流&#xff0c; 语义检索有基本认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货…

Kotlin when 表达式完全指南:从基础到高级的12种实战用法

掌握 when 的灵活运用&#xff0c;告别繁琐的 if-else 链 以下是 Kotlin 中 when 表达式的 12种核心用法 的全面总结&#xff0c;涵盖基础到高级场景&#xff0c;并附带实用示例&#xff1a; 一、基础用法 1. 替代 Java 的 switch-case when (x) {1 -> println("一&qu…

新加坡 PSB 认证:安全标准、证书特点及申请注意事项

目录 什么是PSB认证&#xff1f; 涉及产品范围 强制性认证产品类别 自愿性认证产品 认证项目与测试标准 1. 安全测试 2. 电磁兼容性&#xff08;EMC&#xff09;测试 3. 能效测试&#xff08;特定产品&#xff09; 认证流程详解 第一步&#xff1a;准备阶段 第二步&a…

UE4学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式函数绑定属性绑定事件绑定 九宫格分割图片 几个概念 UMG&#xff1a;UE的UI编辑器 slate UI: UE的UI的编辑语言 创建一个UI蓝图 右键用…

HttpRunner v4.x 远程调用实践指南

一、基于 SSH 的远程执行方案 1. 环境准备流程 在目标服务器部署 HttpRunner 运行时环境&#xff1a; # 远程服务器执行&#xff08;需 Golang 1.18 和 Python 3.8&#xff09; curl -ksSL https://httprunner.com/script/install.sh | bash配置免密登录&#xff08;本地机器…