当前位置: 首页 > news >正文

彩票网站开发 添加彩种教程营销qq官网

彩票网站开发 添加彩种教程,营销qq官网,wordpress需要备案号,介绍好的免费网站模板下载地址在当今的软件开发领域,MVC(Model-View-Controller)设计模式已经成为了一种广泛使用的架构模式。它为应用程序提供了一种结构化的方法,将数据、用户界面和业务逻辑分开,从而使得应用程序更易于维护、扩展和重用。 一、…

在当今的软件开发领域,MVC(Model-View-Controller)设计模式已经成为了一种广泛使用的架构模式。它为应用程序提供了一种结构化的方法,将数据、用户界面和业务逻辑分开,从而使得应用程序更易于维护、扩展和重用。

一、MVC的概述
MVC是一种分层的设计,主要用于解决UI交互方面的经验体系。它包括Model、View和Controller三部分,分别负责数据的存储、视图界面的显示和业务逻辑的处理。MVC模式有助于降低代码的耦合度,实现界面、数据和逻辑的分离,从而易于代码的维护和拓展。

二、MVC的组成部分
模型(Model):模型是应用程序的数据和业务逻辑的核心。它负责处理与数据相关的所有操作,例如数据的增删改查、验证和持久化等。模型是与数据源直接交互的部分,不涉及用户界面或用户输入的处理。
视图(View):视图是应用程序的用户界面。它负责显示数据给用户,并接收用户的输入。视图只关注如何展示数据,而不关心数据从哪里来或应该如何处理。
控制器(Controller):控制器是模型和视图之间的中介。它负责接收用户的输入,处理这些输入,并更新模型和视图。控制器的主要任务是处理用户交互,并根据用户的操作更新数据和界面。控制器不包含任何与数据或用户界面相关的代码,而是专注于处理用户交互和协调模型和视图之间的通信。

三、MVC的优势
MVC模式的优点主要表现在以下几个方面:

解耦:MVC模式将应用程序的不同部分(数据、用户界面和业务逻辑)分离,降低了它们之间的耦合度。这使得开发人员可以独立地专注于各自的部分,提高了开发效率和代码的可维护性。
代码组织:MVC模式为应用程序提供了一种清晰的代码组织结构,使得代码更加模块化和易于管理。这种结构也有助于团队之间的协作,使得不同的开发人员可以专注于不同的部分。
可扩展性:由于MVC模式将应用程序的不同部分分离,因此当应用程序需要扩展时,可以更容易地添加新的功能或模块,而不会对现有的代码造成太大的影响。
可重用性:MVC模式使得模型、视图和控制器的分离,这使得它们可以独立地重用。例如,同一个模型可以与不同的视图或控制器一起使用,或者同一个视图可以用在不同的应用程序中。
易于测试和维护:由于MVC模式将应用程序的不同部分分离,因此可以更容易地对每个部分进行单元测试和集成测试。此外,由于代码的模块化结构,使得代码更易于维护和修改。

四、Unity游戏开发中的MVC
这里提供一个MVC模式的基本功能框架。

Model

using System.Collections;
using System.Collections.Generic;
using UnityEngine;//Model基类
public class BaseModel
{public BaseController controller;//有参构造public BaseModel(BaseController control){this.controller = control;}//无参构造public BaseModel(){}//初始化public virtual void Init(){}
}

View

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//面板基类,因为需要挂载到场景对象上需要继承MonoBehaviour
public class BaseView : MonoBehaviour
{//面板ID属性public int ViewId { get; set; }//面板控制器public BaseController Controller { get; set; }//面板cavansprotected Canvas _canvas;protected Dictionary<string,GameObject> _ObjCache = new Dictionary<string, GameObject>();//面板中对象缓存private bool _isInit = false; //是否初始化void Awake(){_canvas = gameObject.GetComponent<Canvas>();OnAwake();}void Start(){OnStart();}protected virtual void OnAwake(){}protected virtual void OnStart(){}//调用指定控制器的注册方法public void ApplyControllerFunc(int controllerKey, string eventName, params object[] args){this.Controller.ApplyControllerFunc(controllerKey,eventName,args);}//调用自己控制器的注册方法public void ApplyFunc(string eventName, params object[] args){this.Controller.ApplyFunc(eventName,args);}//关闭界面public virtual void Close(params object[] args){SetVisible(false);}//销毁界面public void DestroyView(){Controller = null;Destroy(gameObject);}//初始化数据public virtual void InitData(){_isInit = true;}//初始化UIpublic virtual void InitUI(){}public bool IsInit(){return _isInit;}public bool IsShow(){return _canvas.enabled == true;}public virtual void Open(params object[] args){}public void SetVisible(bool value){this._canvas.enabled = value;}//查找面板中的对象public GameObject Find(string name){if(_ObjCache.ContainsKey(name)){return _ObjCache[name];}_ObjCache.Add(name,transform.Find(name).gameObject);return _ObjCache[name];}public T Find<T>(string name) where T:Component{GameObject obj = Find(name);return obj.GetComponent<T>();}
}

Controller

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//控制器基类
public class BaseController
{private Dictionary<string,Action<object[]>> message;//事件列表protected BaseModel model;//模版数据public BaseController(){message = new Dictionary<string, Action<object[]>>();}//注册后,调用的初始化函数(要求所有控制器初始化后执行)public virtual void Init(){}public virtual void OnLoadView(IBaseView view){}//加载视图//打开视图public virtual void OpenView(IBaseView view){}//关闭视图public virtual void CloseView(IBaseView view){}//注册模版事件public void RegisterFunc(string eventName,Action<object[]> callback){if(message.ContainsKey(eventName)){message[eventName]+=callback;}else{message.Add(eventName,callback);}}//移除模版事件public void UnRegisterFunc(string eventName){if(message.ContainsKey(eventName)){message.Remove(eventName);}}//触发本模块事件public void ApplyFunc(string eventName, params object[] args){if(message.ContainsKey(eventName)){message[eventName].Invoke(args);}else{Debug.Log("error:"+eventName);}}//触发其他模板的事件public void ApplyControllerFunc(int controllerKey,string eventName, params object[] args){GameApp.ControllerManager.ApplyFunc(controllerKey,eventName,args);}//public void ApplyControllerFunc(ControllerType controllerType,string eventName,params object[] args){ApplyControllerFunc((int)controllerType,eventName,args);}//设置模型数据public void SetModel(BaseModel model){this.model = model;this.model.controller = this;}//得到模型数据public BaseModel GetModel(){return model;}//得到模型数据泛型public T GetModel<T>() where T:BaseModel{return model as T;}//得到指定控制器控制的模型public BaseModel GetControllerMode(int controllerKey){return GameApp.ControllerManager.GetControllerModel(controllerKey);}//删除控制器public virtual void Destroy(){RemoveModuleEvent();RemoveGlobalEvent();}//初始化模板事件public virtual void InitModuleEvent(){}//移除模板事件public virtual void RemoveModuleEvent(){}//初始化全局事件public virtual void InitGlobalEvent(){}//移除全局事件public virtual void RemoveGlobalEvent(){}}

ViewManager

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//视图信息类
public class ViewInfo
{public string PrefabName;//视图预制体public Transform parentTf;//父节点public BaseController controller;//视图所属控制器public int sorting_order;//显示层级顺序
}//视图管理器
public class ViewManager 
{public Transform canvasTf;//画布组件public Transform worldCanvasTf;//世界画布组件Dictionary<int,IBaseView> _opens;//开启的视图列表Dictionary<int,IBaseView> _viewCache;//视图缓存Dictionary<int,ViewInfo> _views;//注册的视图信息列表public ViewManager(){canvasTf = GameObject.Find("Canvas").transform;worldCanvasTf = GameObject.Find("WorldCanvas").transform;_opens = new Dictionary<int, IBaseView>();_views = new Dictionary<int, ViewInfo>();_viewCache = new Dictionary<int, IBaseView>();}//注册视图信息public void Register(int key,ViewInfo viewInfo){if(_views.ContainsKey(key)==false){//Debug.Log(viewInfo.PrefabName);_views.Add(key,viewInfo);}}//注册视图信息public void Register(ViewType viewType,ViewInfo viewInfo){Register((int)viewType,viewInfo);}//移除视图信息public void UnRegister(int key){if(_views.ContainsKey(key)){_views.Remove(key);}}//移除面板public void RemoveView(int key){_views.Remove(key);_viewCache.Remove(key);_opens.Remove(key);}//移除控制器中的面板视图public void RemoveViewByController(BaseController controller){foreach(var item in _views){if(item.Value.controller == controller){RemoveView(item.Key);}}}//指定视图是否打开public bool IsOpen(int key){return _opens.ContainsKey(key);}//获得指定视图public IBaseView GetView(int key){if(_opens.ContainsKey(key)){return _opens[key];}if(_viewCache.ContainsKey(key)){return _viewCache[key];}return null;}//获得指定视图,泛型public T GetView<T>(int key) where T:class,IBaseView{IBaseView view = GetView(key);if(view!=null){return view as T;}return null;}//销毁指定视图public void Destroy(int key){IBaseView oldView = GetView(key);if(oldView!=null){UnRegister(key);oldView.DestroyView();_viewCache.Remove(key);}}//关闭面板视图public void Close(int key,params object[] args){Debug.Log(key);if(IsOpen(key)==false){Debug.Log("界面不存在");return;}IBaseView view = GetView(key);if(view!=null){_opens.Remove(key);view.Close(args);_viewCache[key].Controller.CloseView(view);}}//打开指定视图面板public void Open(ViewType type,params object[] args){Open((int)type,args);}//打开指定视图面板public void Open(int key,params object[] args){IBaseView view = GetView(key);ViewInfo viewInfo = _views[key];if(view ==null){string type = ((ViewType)key).ToString();GameObject uiObj = GameObject.Instantiate(Resources.Load($"View/{viewInfo.PrefabName}"),viewInfo.parentTf) as GameObject;Canvas canvas = uiObj.GetComponent<Canvas>();if(canvas==null){canvas = uiObj.AddComponent<Canvas>();}if(uiObj.GetComponent<GraphicRaycaster>()==null){uiObj.AddComponent<GraphicRaycaster>();}//可以设置层级canvas.overrideSorting = true;//设置层级canvas.sortingOrder = viewInfo.sorting_order;//为视图添加对应脚本view = uiObj.AddComponent(Type.GetType(type)) as IBaseView;//设置视图ID;view.ViewId = key;//设置控制器view.Controller = viewInfo.controller;//添加到视图缓存_viewCache.Add(key,view);viewInfo.controller.OnLoadView(view);}if(this._opens.ContainsKey(key)==true){return;}this._opens.Add(key,view);//已经初始化过if(view.IsInit()){view.SetVisible(true);view.Open(args);viewInfo.controller.OpenView(view);}else{view.InitUI();view.InitData();view.Open(args);viewInfo.controller.OpenView(view);}}
}

这个框架中,Model和View没有直接联系,而是通过Controller来控制Model与View之间的信息通信。BaseController中SetModel让Controller和Model关联,面板在ViewManager注册,而在Register方法中让Controller和View关联。进而让Controller来控制Model与View之间的信息通信。
五、总结
MVC设计模式是一种非常有用的架构模式,它使得应用程序的结构更加清晰和易于维护。通过将数据、用户界面和业务逻辑分离,MVC模式提高了代码的可重用性和可扩展性。但MVC设计模式也有缺陷,由于将逻辑与数据分离,程序员需要了解并设计MVC之间的结构,信息通信方式等等,且这一定程度上让程序更加复杂。


文章转载自:
http://dinncopupillage.bpmz.cn
http://dinncowriggler.bpmz.cn
http://dinncooarweed.bpmz.cn
http://dinncooligocene.bpmz.cn
http://dinncoplot.bpmz.cn
http://dinncojam.bpmz.cn
http://dinncomitigation.bpmz.cn
http://dinncorailsplitter.bpmz.cn
http://dinncofountain.bpmz.cn
http://dinncofriended.bpmz.cn
http://dinncopiccalilli.bpmz.cn
http://dinnconovelty.bpmz.cn
http://dinncofortunetelling.bpmz.cn
http://dinncounprimitive.bpmz.cn
http://dinncoatween.bpmz.cn
http://dinncokinglike.bpmz.cn
http://dinncomolasse.bpmz.cn
http://dinncochequer.bpmz.cn
http://dinncoscoticise.bpmz.cn
http://dinnconeckrein.bpmz.cn
http://dinncoglycolipid.bpmz.cn
http://dinncohacienda.bpmz.cn
http://dinncopostimpressionism.bpmz.cn
http://dinncosebacic.bpmz.cn
http://dinncotable.bpmz.cn
http://dinncopupil.bpmz.cn
http://dinncomute.bpmz.cn
http://dinncoecogeographical.bpmz.cn
http://dinncopatronite.bpmz.cn
http://dinncoyechy.bpmz.cn
http://dinnconacrous.bpmz.cn
http://dinncograss.bpmz.cn
http://dinncohostelry.bpmz.cn
http://dinncophellogen.bpmz.cn
http://dinncoannounciator.bpmz.cn
http://dinncomelanesian.bpmz.cn
http://dinncocar.bpmz.cn
http://dinncotenth.bpmz.cn
http://dinncointelligence.bpmz.cn
http://dinncotranslationese.bpmz.cn
http://dinncoapodia.bpmz.cn
http://dinncodiophantine.bpmz.cn
http://dinncodiscotheque.bpmz.cn
http://dinncocontrapposto.bpmz.cn
http://dinncobrochette.bpmz.cn
http://dinncocharmeuse.bpmz.cn
http://dinncogoldenrain.bpmz.cn
http://dinncomnemonist.bpmz.cn
http://dinncoscuncheon.bpmz.cn
http://dinncoconspue.bpmz.cn
http://dinncounexploded.bpmz.cn
http://dinncosubmuscular.bpmz.cn
http://dinncocootie.bpmz.cn
http://dinncohyperexcitability.bpmz.cn
http://dinncoectrodactylous.bpmz.cn
http://dinncohomosexual.bpmz.cn
http://dinncokitsch.bpmz.cn
http://dinncoreactive.bpmz.cn
http://dinncodistillate.bpmz.cn
http://dinncoisoprenaline.bpmz.cn
http://dinncoliftman.bpmz.cn
http://dinncoato.bpmz.cn
http://dinncoscca.bpmz.cn
http://dinnconoumenally.bpmz.cn
http://dinncooxidize.bpmz.cn
http://dinncoquicksandy.bpmz.cn
http://dinncoslow.bpmz.cn
http://dinncoskipper.bpmz.cn
http://dinncocouldst.bpmz.cn
http://dinncocartoon.bpmz.cn
http://dinncoleftie.bpmz.cn
http://dinncocarryout.bpmz.cn
http://dinncosyndic.bpmz.cn
http://dinncotoreutic.bpmz.cn
http://dinncobeedie.bpmz.cn
http://dinncooliguresis.bpmz.cn
http://dinncocranage.bpmz.cn
http://dinncojollity.bpmz.cn
http://dinncomeiosis.bpmz.cn
http://dinncocitronellal.bpmz.cn
http://dinncocalorescence.bpmz.cn
http://dinncorevanchism.bpmz.cn
http://dinncoararat.bpmz.cn
http://dinncosore.bpmz.cn
http://dinncoidentically.bpmz.cn
http://dinncoflush.bpmz.cn
http://dinncotriturable.bpmz.cn
http://dinncowiliness.bpmz.cn
http://dinncobrokage.bpmz.cn
http://dinncotheorist.bpmz.cn
http://dinncodivorce.bpmz.cn
http://dinncodepose.bpmz.cn
http://dinncoheadwaiter.bpmz.cn
http://dinnconancified.bpmz.cn
http://dinncoindeterminable.bpmz.cn
http://dinncothiochrome.bpmz.cn
http://dinncocause.bpmz.cn
http://dinncohangdog.bpmz.cn
http://dinncoarrhizal.bpmz.cn
http://dinncoepiphenomenalism.bpmz.cn
http://www.dinnco.com/news/114087.html

相关文章:

  • 企业建站公司案例吉林关键词优化的方法
  • 闵行区网站公司怎么做网站推广
  • 网站建设合同服务内容公司网站建设北京
  • 丹江口做网站百度爱采购官方网站
  • 国外专名做路演的网站怎么做网站免费的
  • 一般政府网站用什么做成都网站seo技巧
  • 网站直播用php怎么做的贵州百度seo整站优化
  • 遵义网站开发的公司有哪些网络营销推广的总结
  • 长春火车站咨询电话号码是多少新闻今天
  • 织梦做导航网站百度企业查询
  • 可以做没有水印的视频网站批量关键词调排名软件
  • 自己做网站赚钱案例seo霸屏软件
  • 四川做网站的公司哪家好如何建立自己的网站平台
  • 门户网站有哪些seo怎样才能优化网站
  • 长沙专门做网站公司搜索引擎网址
  • jsp建网站线上线下一体化营销
  • 现在的网站用什么程序做适合40岁女人的培训班
  • 重庆大足网站建设百度目前的推广方法
  • 很简单的做设计的网站如何做好推广工作
  • 南昌做网站公司今日新闻最新头条
  • 做外贸独立网站怎么样sem营销
  • 运营活动策划方案太原网站优化公司
  • 甘肃省住房与城乡建设厅网站首页seo外包 靠谱
  • 百度网站上传整合营销包括哪三方面
  • 金耀网站建设新乡搜索引擎优化
  • 网站建设草图方案安徽seo推广
  • dedecms做网站武汉seo工作室
  • wordpress微信电子书插件seo宣传网站
  • 杭州市网站建设公司网店推广策划方案
  • 杭州网站排名优化公司简单的网站制作