面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式
2015-06-21 12:41
716 查看
上一页本文描述描述有关数据的发展过程之间的差异支撑点,这里展示的另一个特点:无缝切换的发展,以独立C/S模式
一般C/S模式都面临一个问题:
就是开发过程中的调试难题,由于涉及到client和服务端相关方法,假设由某个人来编写那么也是一个简单的事情.
假设由2个人编写,会带来一些平台上的差别以及编码的差别.
简单的说,假设我们在开发时全然的避开C/S,然后经由某个机制,能够直接让模块跑到server上,那么这将让你的开发速度上升好几个倍率.
没有协议,没有交互,没有网络,那么从头写到尾,也是一件比較简单的事情了,无需专门的服务端主程了(貌似哥们要失业了....><...).
首先来说一下,结合差异化网络数据交互方式的开发模式,比較绕口.
从模式上说,传统的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模式.
这边贴上一个演示样例,关于代理层和实际控制层的差别
一般C/S模式都面临一个问题:
就是开发过程中的调试难题,由于涉及到client和服务端相关方法,假设由某个人来编写那么也是一个简单的事情.
假设由2个人编写,会带来一些平台上的差别以及编码的差别.
简单的说,假设我们在开发时全然的避开C/S,然后经由某个机制,能够直接让模块跑到server上,那么这将让你的开发速度上升好几个倍率.
没有协议,没有交互,没有网络,那么从头写到尾,也是一件比較简单的事情了,无需专门的服务端主程了(貌似哥们要失业了....><...).
首先来说一下,结合差异化网络数据交互方式的开发模式,比較绕口.
从模式上说,传统的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); } }
相关文章推荐
- HTTPS 客户端发送请求(三)
- HTTP内容篡改实践
- 黑马程序员——学习日记之--Java网络编程小结
- 网络图片加载的第三方类:EGOImageView的使用方法及注意事项
- TCP 三次握手 四次挥手
- TCP/IP协议族-----6、IP分组的交付和转发
- Git服务器、http协议及XCode
- windows 10系统DHCP未指派致网络连接受限的详细解决办法
- ios:关于ASIHTTP:setDownloadProgressDelegate代理不声明协议的问题(已解决)
- .net 稳定 高效 易用 可同步 TCP 通信框架
- java笔记30 网络编程2 服务器
- ASP.NET MVC 部署全站HTTPS
- ubuntu 休眠之后网络间接失败 can not connect to network after suspend (wake up)
- HttpWebRequest下载文件,乱码问题解决方案
- 哈佛商业评论: 从商战到反恐,如何建立指挥系统内外的“网络”
- java笔记29 网络编程(UDP TCP)
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 网络编址与端口配置
- TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口
- Linux 上网络监控工具 ntopng 的安装