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分层开发思想的示例代码:

cs 复制代码
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);
        //增加金币数1
        d["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"; 
}

    
cs 复制代码
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;
    }
cs 复制代码
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);
    }
}
        
cs 复制代码
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各物体挂载及摆放,如想实践,自取代码进行相应修改调试 。

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

相关推荐
空空kkk7 小时前
Spring、Spring MVC、SpringBoot的欢迎页配置
spring boot·spring·mvc
yangminlei8 小时前
Spring MVC 响应机制综合实践:页面、数据、JSON 与响应配置
spring·json·mvc
哪里不会点哪里.1 天前
Spring MVC 核心原理解析:从请求到响应到底发生了什么?
java·spring·mvc
哪里不会点哪里.1 天前
Spring MVC Restful 风格的接口流程是什么样的呢?
spring·mvc·restful
那我掉的头发算什么1 天前
【Spring】从0到1掌握Spring MVC应用分层
java·后端·spring·mvc
马猴烧酒.1 天前
智能协图云图库学习笔记day5
java·jvm·spring boot·笔记·学习·mvc
哪里不会点哪里.2 天前
Spring MVC 四种核心传参形式详解
java·spring·mvc
那我掉的头发算什么3 天前
【Spring MVC】手动做出小网页的最后一步——学会SpringMVC响应
java·服务器·后端·spring·mvc
xiaolyuh1234 天前
Spring MVC 深度解析
java·spring·mvc
派大鑫wink5 天前
【Day42】SpringMVC 入门:DispatcherServlet 与请求映射
java·开发语言·mvc