栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[2022.3.13]<呆头熊的开发日记>MVC框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[2022.3.13]<呆头熊的开发日记>MVC框架

一、MVC组件类型的关系和功能

二、Model 、View、Controller类

1、Model:封装应用状态、发送通知(委托MVC完成
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class Model 
{
    //只读
    public abstract string Name { get; }

    protected void SendEvent(string eventName, object data = null)
    {
        MVC.SendEvent(eventName, data);
    }
}

2、View(查询状态、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class View : MonoBehaviour
{
    //标识
    public abstract string Name { get; }

    //事件列表
    public List AttationEvents = new List();

    //事件处理函数
    public abstract void Execeute(object data);

    //获取模型
    protected Model GetModel()
        where T : Model
    {
        return MVC.GetModel();

    }


    //发送消息
    protected void SendEvent(string eventName, object data = null)
    {
        MVC.SendEvent(eventName, data);
    }
}

3、Controller: 协调Model与View之间的交互
using System.Collections;
using System.Collections.Generic;
using System;

public abstract class Controller 
{
    //获取模型
    protected Model GetModel()
        where T : Model
    {
        return MVC.GetModel();
    }

    //获取视图
    protected View GetView()
        where T : View
    {
        return MVC.GetView();
    }

    protected void RegisterModel(Model model)
    {
        MVC.RegisterModel(model);
    }

    protected void RegisterView(View view)
    {
        MVC.RegisterView(view);
    }

    protected void RegisterController(string eventName, Type controllerType)
    {
        MVC.RegisterController(eventName, controllerType);
    }


    //处理系统消息
    public abstract void Execeute(object data);

    
}

4、MVC:保存MVC & 处理事件分发
public static class MVC 
{
    //存储MVC
    public static Dictionary Models = new Dictionary(); //名字---模型
    public static Dictionary Views = new Dictionary(); //名字---视图
    public static Dictionary CommandMap = new Dictionary(); //事件名字---控制器类型

    //注册
    public static void RegisterModel(Model model)
    {
        Models[model.Name] = model;
    }
    public static void RegisterView(View view)
    {
        Views[view.Name] = view;
    }
    public static void RegisterController(string eventName, Type controllerType)
    {
        CommandMap[eventName] = controllerType;
    }

    //获取
    public static Model GetModel()
        where T : Model
    {
        foreach(Model m in Models.Values)
        {
            if (m is T)
                return m;
        }
        return null;
    }

    public static View GetView()
        where T : View
    {
        foreach (View v in Views.Values)
        {
            if (v is T)
                return v;
        }
        return null;
    }


    //发送事件
    public static void SendEvent(string eventName, object data = null)
    {
        //控制器响应事件
        if (CommandMap.ContainsKey(eventName))
        {
            Type t = CommandMap[eventName];
            Controller c = Activator.CreateInstance(t) as Controller;
            //控制器执行
            c.Execeute(data);
        }


        //视图响应事件
        foreach (View v in Views.Values)
        {
            if (v.AttationEvents.Contains(eventName))
            {
                //视图响应事件
                v.Execeute(data);
            }
        }


    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763793.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号