面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式

时间:2022-06-01 18:24:51

上一页本文描述描述有关数据的发展过程之间的差异支撑点,这里展示的另一个特点:无缝切换的发展,以独立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);
}
}

面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式的更多相关文章

  1. Fragment和Activity之间通过广播的方式传递数据

    四大组件之间传递数据可以用广播,但是有次面试官说太重了,用eventbus代替.下面的广播传递数据方法仅当学习参考. 1.管理类 /** * 广播管理类:注册广播.注销广播.发送广播 * @autho ...

  2. php 面向对象的方式访问数据库

    <body> <?php //面向对象的方式访问数据库 //造对象 $db = new MySQLi("localhost","root",& ...

  3. PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程

    <?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user=&quo ...

  4. laravel使用 面向对象的方式绑定多对多的关系

    创建model文件,并且一起创建migration文件: php   artisan  make:model Habit  -m 创建多对多的中间表的方法: php artisan make:migr ...

  5. Lua和C&plus;&plus;交互 学习记录之九:在Lua中以面向对象的方式使用C&plus;&plus;注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  6. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  7. Android传统HTTP请求get----post方式提交数据&lpar;包括乱码问题&rpar;

    1.模仿登入页面显示(使用传统方式是面向过程的) 使用Apache公司提供的HttpClient  API是面向对象的 (文章底部含有源码的连接,包括了使用async框架) (解决中文乱码的问题.主要 ...

  8. android 之HttpURLConnection的post&comma;get方式请求数据

    get方式和post方式的区别: 1.请求的URL地址不同: post:"http://xx:8081//servlet/LoginServlet" get:http://xxx: ...

  9. Android 采用post方式提交数据到服务器

    接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...

随机推荐

  1. jQuery实现checkbox的全选和反选

    $(function () { if ($(".chk_all")) { $(".chk_all").click(function () { $("i ...

  2. C&num;:获取环境信息

    外部环境数据1.需要管理员权限2.需要安装office2003以上完整版3.需要安装flash reader 10.0以上4.需要安装adodb reader;Adobe Acrobat X Pro; ...

  3. C&num; 模拟提交 Form表单的数据

    用 HttpWebRequest Post方法模拟提交Form表单数据时,需要设置 ContentType 为 "application/x-www-form-urlencoded&quot ...

  4. Node&period;js 学习(六)Node&period;js EventEmitter

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.read ...

  5. &lbrack;LeetCode&rsqb;题解(python):141-Linked List Cycle

    题目来源: https://leetcode.com/problems/linked-list-cycle/ 题意分析: 给定一个链表,判断链表是否有环.要求O(1)空间时间复杂度. 题目思路: 用快 ...

  6. es6笔记6&Hat;&lowbar;&Hat;generator

    1.简介 Generator函数是一个函数的内部状态的遍历器(也就是说,Generator函数是一个状态机). 形式上,Generator函数是一个普通函数,但是有两个特征. function命令与函 ...

  7. Mac 终端—不同文件不同颜色显示,提示文字

    原文地址 修改Mac终端(Terminal)里不同类型文件的显示颜色 修改Mac终端(Terminal)的提示文字 Mac终端显示/隐藏文件命令 1. 修改Mac终端(Terminal)里不同类型文件 ...

  8. MySQL实现分组取组内特定数据的功能

    需求:在MySQL5.7环境下,查询下面表中,各个学科前两名的学生的成绩: 1.准备数据 窗机表以及向表中插入数据 创建一张表: DROP TABLE IF EXISTS `grade`; CREAT ...

  9. BZOJ&period;1468&period;Tree&lpar;点分治&rpar;

    BZOJ1468 POJ1741 题意: 计算树上距离<=K的点对数 我们知道树上一条路径要么经过根节点,要么在同一棵子树中. 于是对一个点x我们可以这样统计: 计算出所有点到它的距离dep[] ...

  10. mybatis中存储过程的调用

    dao层 // 调用存储过程 void callProcedureGrantEarnings(@Param("params") Map<String,Object> p ...