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

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

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

用面向对象的方式进行数据访问

首先我们需要造对象 1 $db = new MYSQLi ("localhost","root","","aaaaa"); 关键字是   MYSQLi     括号内的四个参数分别是(“要连接服务器的IP地址”,“服务器的用户名”,“密码”,“服务器名称”)创造完成的对象可以交给一个变量$db,那么这个$db里面就存着的是一个MYSQLi的对象了. 第二步 判断连接是否成功 1 !mysqli_connect_error()

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

<?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user="root"; private $password="root"; private $db="test"; function SqlTool(){ $this->conn=mysql_connect($this->host,$this->u

ADO.NET 非连接方式进行数据访问

1. 配置 DataAdapter 以检索信息 1.1. DataAdapter ? 数据适配器是数据集与数据源交互的桥梁 –使相当于数据源本地拷贝的数据集可以与数据源之间进行交互. ? 为数据库提供的主要两种数据适配器 – SqlDataAdapter:不经过OLEDB层直接与SQLServer交互,速度较OleDbDataAdapter快. – OleDbDataAdapter:适用于任何可以用OLEDB数据提供者访问的数据源. 1.2. XxxDataAdapter对象模型 ? Comma

Android传统HTTP请求get----post方式提交数据(包括乱码问题)

1.模仿登入页面显示(使用传统方式是面向过程的) 使用Apache公司提供的HttpClient  API是面向对象的 (文章底部含有源码的连接,包括了使用async框架) (解决中文乱码的问题.主要是对中文的数据进行URL编码) android手机默认的编码是UTF-8 2.手机截图Demo 3.server截图 代码例如以下: server端的代码: //測试 android设备登入 public class Login extends HttpServlet { public void d

Android传统HTTP请求get----post方式提交数据(包含乱码问题)

1.模仿登入页面显示(使用传统方式是面向过程的) 使用Apache公司提供的HttpClient  API是面向对象的 (解决中文乱码的问题,主要是对中文的数据进行URL编码) android手机默认的编码是UTF-8 2.手机截图Demo 3.服务器截图 代码如下: 服务器端的代码: //测试 android设备登入 public class Login extends HttpServlet { public void doGet(HttpServletRequest request, Ht

苹果微信浏览器不能post方式提交数据问题

form表单中采用post方式提交数据时,在苹果的微信浏览器中无法传递,安卓的可以 如图: 在controller中获取该数据为 null 将表单的提交方式修改为get就能够获取到 现在采用Ajax方式进行提交

get和post方式请求数据,jsonp

get方式请求数据: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Consolas; color: #289c97 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Consolas; color: #060606 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 19.0px Consolas; color: #4663cc }

JQuery以JSON方式提交数据到服务端

JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储到数据库中.服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等. 首

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

接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="m