上一篇这里描述了一个关于差异数据在开发过程中的一个优点,这里来演示另外一个特点:单机开发之无缝切换到C/S模式

一般C/S模式都面临一个问题:

就是开发过程中的调试难题,因为涉及到客户端和服务端相关方法,如果由某个人来编写那么也是一个简单的事情.

如果由2个人编写,会带来一些平台上的区别以及编码的区别.

简单的说,如果我们在开发时完全的避开C/S,然后经由某个机制,可以直接让模块跑到服务器上,那么这将让你的开发速度上升好几个倍率.

没有协议,没有交互,没有网络,那么从头写到尾,也是一件比较简单的事情了,无需专门的服务端主程了(貌似哥们要失业了....><...).

首先来说一下,结合差异化网络数据交互方式的开发模式,比较绕口.

从模式上说,传统的MVC模式比较类似.

1.Model层,定义并描述了整个场景,细化到每一个数据对象,HP,MP之类

2.View(UI)层,

2.1把对应的数据绑定到UI上某个显示元素,当这个数据修改的时候,刷新UI上的数据.

2.2当用户激活某个控件,发出一条命令,并且当命令响应后,执行对应的回调方法

3.Control层, 对应应用层的逻辑,比如修改了某个数值

这就是本地单机开发的模式,然后就是本文的重点了,如何把单机模式切换到C/S模式.

参考之前的文章,假设了2个Model之间的同步问题,

那么把M/C 2层拷贝到服务端,然后通过同步协议同步本地的Model和远程的Model,就切换成功了.

来看下远程流程:

UI->本地Model->发出命令,等待回调->发送到远程->远程执行命令->修改远程Model->获得返回值和差异数据->

->本地Model 通过返回值和差异数据 同步->激活UI修改事件,修改绑定UI元素->执行回调

单机开发流程:

UI->本地Model->发出命令,等待回调->执行命令->修改Model->激活UI修改事件,修改绑定UI元素->执行回调

仅仅在执行之前和回调进行一层简单的桥接,那么即可切换到C/S模式.

这边贴上一个示例,关于代理层和实际控制层的区别

    public class Model : System.ComponentModel.INotifyPropertyChanged{private string _name = null;private int _count = 0;public string Name{get { return _name; }set{if (_name != value){_name = value;OnPropertyChanged("Name");}}}public int Count{get { return _count; }set{if (_count != value){_count = value;OnPropertyChanged("Count");}}}public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string name){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(name));}}}/// <summary>/// 实际控制类/// </summary>public class ModelControl : Model{public virtual void ChangeName(string name, Action callback){this.Name = name;if (callback != null){callback();}}public virtual void ChangeCount(int count, Action callback){this.Count = count;if (callback != null){callback();}}}/// <summary>/// 代理类/// </summary>public class RemoteModelControl : Model{public  void ChangeCount(int count, Action callback){RemoteCall.BuildRequest(callback, "ChangeCount", count,null);}public  void ChangeName(string name, Action callback){RemoteCall.BuildRequest(callback, "ChangeName", name, null);}}

面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式相关推荐

  1. 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据

    主题 场景切换 场景间数据传递方式 小游戏全局背景音效 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的 ...

  2. js json对象转字符串_Mock.js模拟数据实现前端独立开发

    在后端接口尚未完成时, 前端开发人员只能请求静态文件的方式来模拟数据, 非常繁琐, 使用mockjs, 我们可以对ajax请求进行拦截, 随机生成各种各样的数据, 包括图片, 非常方便, 由于实在肝不 ...

  3. android开发之网络棋牌类在线游戏开发心得(服务器端、Java)

    转自:http://blog.csdn.net/bromon/article/details/253330 Bromon原创 请尊重版权 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整 ...

  4. android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏...

    标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android (11) 转自:http://blog.csdn.net/bromon/ ...

  5. 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)...

    http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...

  6. JAVA实现网络多线程编程小游戏开发

    总结一下JAVA本学期的大作业. 实验总结:五子棋是一个很简单的游戏,但是如果认真对待,一个代码一个代码的去研究,会收获到很多知识,会打好学习基础.方便以后开发更高.更难的项目时打下稳固的基础.在自己 ...

  7. 5G差异化业务场景需求及网络切片(1)

    文章目录 前言 一.5G网络切片在国内外研究情况 二.为什么需要网络切片? 2.1 不同场景对差异化业务的挑战 2.2 技术的驱动 三.什么是网络切片 3.1网络切片的特征 3.2网络切片的价值 四. ...

  8. 元宇宙之NFT行业分析:中国数字藏品行业有望走向规范化、差异化

    ​潜力博主推荐,点上面关注博主↑↑↑ 一.中国数字藏品行业生态演进:合规化,差异化 (一)中办国办定调鼓励文化数字创新业务,行业形成自律规范 数字藏品作为新兴产业,在我国尚未搭建由上至下完善的监管机制 ...

  9. iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

最新文章

  1. apache2.2.21 + php5.3.8 + mysql5.5配置
  2. 如何正确的使用单例模式
  3. 信息系统项目管理师-信息系统项目管理基础核心知识点思维脑图
  4. scala为什么需要函数
  5. 英雄联盟更新后服务器还在维护吗,英雄联盟今天维护到什么时候结束 11月12日停机更新维护公告...
  6. 音视频技术开发周刊 | 157
  7. Source Insight 4.0 最简单的破解安装
  8. Java:关于main方法的10道面试题
  9. Advanced C++ --- const function
  10. vue.js 入门,简介
  11. 输入文字自动生成图片_原来Word还可以自动生成图片和图表目录!
  12. matlab中LMI工具箱函数feasp的用法
  13. KendoUI和wijmoUI 它们的Grid比较 20120423
  14. 同时开多个独立窗口Visio 2003/2007版本的软件
  15. 信息系统项目管理师项目合同管理
  16. 软件测试设计之——场景设计法,判定表法
  17. 嘉兴 机器人仓库 菜鸟_菜鸟在嘉兴推出全新智能仓 在“双11”启用超级机器人仓群...
  18. Shell脚本——条件语句
  19. Linux GIC代码分析
  20. Java大作业之餐厅管理系统

热门文章

  1. html打气球游戏,打气球.html
  2. 迷惑新手的IOS开发问题
  3. NOIP2021题解~持续更新
  4. IS_REACHABLE
  5. 【Python】绘制GPX轨迹图并定位特定时间点
  6. 微信小程序链接mysql数据库
  7. Linux Realtek RTL8723BE驱动掉线重连不上问题解决
  8. matlab和opencv混编(mex问题,mexopencv问题)(水下相机折射补偿:Pinax-model)
  9. 电脑开机后显示器会出现无视频输入然后出现睡眠模式 最近几天会出现显示器打开就出来无视频输入?
  10. Windows10 Hyper-v 虚拟机安装点心云,实现闲置宽带共享。