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

温州网站建设专业的公司手机app制作用什么软件

温州网站建设专业的公司,手机app制作用什么软件,销售网站开发与设计现状,s.w.g wordpress由浅入深#xff0c;慢慢演化实现框架 两个类的实现代码完全一样#xff0c;就只有类名或类型不一样的时候#xff0c;而且还需要不断扩展#xff08;未来会增加各种事件#xff09;的时候#xff0c;这时候就用 泛型 继承 来提取#xff0c;继承解决扩展的问题#…由浅入深慢慢演化实现框架 两个类的实现代码完全一样就只有类名或类型不一样的时候而且还需要不断扩展未来会增加各种事件的时候这时候就用 泛型 继承 来提取继承解决扩展的问题泛型解决实现代码一致类不一致的问题这是一个重构技巧。 表现和数据要分离 数据在大多数情况下需要在多个场景、界面、游戏物体之间是共享的这些数据不但需要在空间上共享还需要再时间上也需要共享需要存储起来所以在这里开发者的共识就是把数据的部分会抽离出来单独放在一个地方进行维护而比较常见的开发架构就是使用 MVC 的开发架构我们先不用 MVC 的开发架构而只用 MVC 中的其中一个概念就是 Model。 Model 就是管理数据、存储数据管理数据就是可以通过 Model 对象或类可以对数据进行增删改查有的时候还可以进行存储。 public class GameModel{public static int KillCount 0;public static int Gold 0;public static int Score 0;public static int BestScore 0;} 用泛型 继承 提取 Event 工具类子节点通知父节点也可以用事件根据情况表现和需要共享的数据分离正确的代码要放在正确的位置 如果是共享的数据就放在 Model 里如果不是共享的就不需要。 这里共享的数据可以是配置数据、需要存储的数据、多个地方需要访问的数据。 对于配置数据来说游戏中的场景和 GameObject、Prefab 在运行游戏之前也是一种配置数据因为他们本质上是用 Yaml类似 json、xml 的数据格式存储在磁盘上的。 而需要存储的数据是从时间这个维度共享的数据即现在可以访问以前某个时刻存储的数据。 复用  可绑定属性 using System;namespace FrameworkDesign {public class BindablePropertyT where T : IEquatableT{private T mValue;public T Value{get mValue;set{if (!mValue.Equals(value)){mValue value;OnValueChanged?.Invoke(value);}}}public ActionT OnValueChanged;} } BidableProperty 是 数据 数据变更事件 的合体它既存储了数据充当 C# 中的 属性这样的角色也可以让别的地方监听它的数据变更事件这样会减少大量的样板代码 表现逻辑 适合用 事件 或 委托表现逻辑用方法调用会造成很多问题Controller 臃肿难维护、Model 和 View 是自底向上的关系自底向上用事件或委托自顶向下用方法调用 命令模式 用一个方法来写的逻辑改成用对象来实现而这个对象只有一个执行方法。 我们先定义一个接口叫做 ICommand代码如下 namespace FrameworkDesign {public interface ICommand{void Execute();} } 实现接口 public struct AddCountCommand : ICommand{public void Execute(){CounterModel.Count.Value;}} Command 模式就是逻辑的调用和执行是分离的 空间分离的方法就是调用的地方和执行的地方放在两个文件里。 时间分离的方法就是调用的之后Command 过了一点时间才被执行。 而 Command 模式由于有了调用和执行分离这个特点所以我们可以用不同的数据结构去组织 Command 调用比如命令队列再比如用一个命令的堆栈来实现撤销功能ctrl z 引入单例 静态类没有访问限制。使用 static 去扩展模块其模块的识别度不高。 public class SingletonT where T : class{public static T Instance{get{if (mInstance null){// 通过反射获取构造var ctors typeof(T).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic);// 获取无参非 public 的构造var ctor Array.Find(ctors, c c.GetParameters().Length 0);if (ctor null){throw new Exception(Non-Public Constructor() not found in typeof(T));}mInstance ctor.Invoke(null) as T;}return mInstance;}}private static T mInstance;} 模块化优化--引入 IOC 容器 IOC 容器大家可以理解为是一个字典这个字典以 Type 为 key以对象即 Instance 为 value非常简单。 而 IOC 容器最少有两个核心的 API即根据 Type 注册实例根据 Type 获取实例。 实现一个简单的 IOC 容器 public class IOCContainer{/// summary/// 实例/// /summarypublic DictionaryType, object mInstances new DictionaryType, object();/// summary/// 注册/// /summary/// param nameinstance/param/// typeparam nameT/typeparampublic void RegisterT(T instance){var key typeof(T);if (mInstances.ContainsKey(key)){mInstances[key] instance;}else{mInstances.Add(key,instance);}}/// summary/// 获取/// /summarypublic T GetT() where T : class{var key typeof(T);object retObj;if(mInstances.TryGetValue(key,out retObj)){return retObj as T;}return null;}} 将这个代码用起来 我们先创建一个 CounterApp 类用于注册全部模块代码如下: using FrameworkDesign;namespace CounterApp {public class CounterApp{private static IOCContainer mContainer null;// 确保 Container 是有实例的static void MakeSureContainer(){if (mContainer null){mContainer new IOCContainer();Init();}}// 这里注册模块private static void Init(){mContainer.Register(new CounterModel());}// 提供一个获取模块的 APIpublic static T GetT() where T : class{MakeSureContainer();return mContainer.GetT();}} } 接着我们把 CounterApp 类应用起来代码如下 using FrameworkDesign; using UnityEngine; using UnityEngine.UI;namespace CounterApp {public class CounterViewController : MonoBehaviour{private CounterModel mCounterModel;void Start(){// 获取mCounterModel CounterApp.GetCounterModel();// 注册mCounterModel.Count.OnValueChanged OnCountChanged;transform.Find(BtnAdd).GetComponentButton().onClick.AddListener(() {// 交互逻辑new AddCountCommand().Execute();});transform.Find(BtnSub).GetComponentButton().onClick.AddListener(() {// 交互逻辑new SubCountCommand().Execute();});OnCountChanged(mCounterModel.Count.Value);}// 表现逻辑private void OnCountChanged(int newValue){transform.Find(CountText).GetComponentText().text newValue.ToString();}private void OnDestroy(){// 注销mCounterModel.Count.OnValueChanged - OnCountChanged;mCounterModel null;}}/// summary/// 不需要是单例了/// /summarypublic class CounterModel{public BindablePropertyint Count new BindablePropertyint(){Value 0};} } AddCountCommand.cs using FrameworkDesign;namespace CounterApp {public struct AddCountCommand : ICommand{public void Execute(){CounterApp.GetCounterModel().Count.Value;}} } SubCountCommand.cs using FrameworkDesign;namespace CounterApp {public struct SubCountCommand : ICommand{public void Execute(){CounterApp.GetCounterModel().Count.Value--;}} } --dd这就是框架吗  orz 以下代码容易重复 PiontGame.cs namespace FrameworkDesign.Example {public class PointGame {private static IOCContainer mContainer null;// 确保 Container 是有实例的static void MakeSureContainer(){if (mContainer null){mContainer new IOCContainer();Init();}}// 这里注册模块private static void Init(){mContainer.Register(new GameModel());}// 提供一个获取模块的 APIpublic static T GetT() where T : class{MakeSureContainer();return mContainer.GetT();}} } 优化一下创建一个类名字叫 Architecture.cs 代码如下: namespace FrameworkDesign {/// summary/// 架构/// /summary/// typeparam nameT/typeparampublic abstract class ArchitectureT where T : ArchitectureT, new(){#region 类似单例模式 但是仅在内部课访问private static T mArchitecture null;// 确保 Container 是有实例的static void MakeSureArchitecture(){if (mArchitecture null){mArchitecture new T();mArchitecture.Init();}}#endregionprivate IOCContainer mContainer new IOCContainer();// 留给子类注册模块protected abstract void Init();// 提供一个注册模块的 APIpublic void RegisterT(T instance){MakeSureArchitecture();mArchitecture.mContainer.RegisterT(instance);}// 提供一个获取模块的 APIpublic static T GetT() where T : class{MakeSureArchitecture();return mArchitecture.mContainer.GetT();}} }
http://www.w-s-a.com/news/814819/

相关文章:

  • 网站建设校长信箱设计方案小程序报价开发
  • 电子网站建设ppt模板营销策划方案怎么写?
  • 什么网站收录排名最高济南能源建设网站
  • 深圳移动网站建设公司价格桂林做网站哪家公司好
  • 互联网网站名字网站合作建设合同
  • 舟山高端网站设计广州优化排名推广
  • 哪个网站做免费广告好上海人才网站
  • cn域名做网站竞价推广代理
  • 省建设干部培训中心网站网站地图1 500 怎么做
  • 制作一个网站需要哪些人网站建设经营服务合同
  • 山东省住房和城乡建设厅官方网站网易发布广州
  • 长沙设计网站效果设计师灵感网站
  • 做网站php都用什么框架把asp.net写的网站别人怎么访问
  • 网站建设捌金手指下拉六正规的代运营公司
  • 自己申请网站空间冀州建网站
  • 哈尔滨旅游团购网站建设江苏建设工程建设网
  • 在郑州做网站茶叶网站建设网页设计制作
  • 58做网站吗南京有关制作网站的公司
  • 申请建设门户网站的申请先做网站还是先申请域名
  • 门户网站怎么做seo玩具外贸好做吗
  • 网页设计模板的网站黄埔营销型网站建设
  • 企业为什么要建立网站江苏高校品牌专业建设工程网站
  • 网站建设公司需要交税么福建省城乡建设厅网站
  • dedecms网站首页网站正在建设中 源码下载
  • 论坛网站有哪些怎么wordpress主题
  • 网站搭建中企动力第一返利的网站怎么做
  • 在哪网站可以做农信社模拟试卷优衣库网站建设的目的
  • 杭州网站建设ttmwl网络平台推广公司
  • 工作室网站技能培训班
  • 东丰网站建设万盛网站制作