澳门美高梅手机网站Winform开发之距线式WCF开发框架的贯彻介绍

1、数据库表记录ID定义唯一性。

斯是大分布式系统的渴求了,在一些不足为奇的Winform程序的数据库被吗于泛,之所以将她当第一长长的,虽然简单,但是非常必要,因为要避免分布式的客户端和劳动端的数额冲突问题,特别以差不多只客户端的景况下,对数码的唯一性要发出好之控制性。

用这也求基础之框架基类,能够提供对整形、字符型的主键ID的操作兼容性,这当自我的Winform开发框架中,支持是比较好之。

 

  时Android游戏的盈利模式大概如下几栽:

实质上目前店集中化管理,这种模式要求多,如部分加盟店之情景,需要单独运行,有好本着有些总局关键数据进行付出或者下载,如客户信息相当。这种状况下,就要求我们开发者提供可采取场景的开发框架进行支持。离线式的WCF开发框架,一个特点就是大抵显示,以及保存等操作数据库的数据,都是地面的数据库,不是远端的服务器数据库,这样,就需记录有来变更的数据库操作,包括写副,删除、修改等,以便在网络通之景下,可以上传数据到服务器上面。

     
2、模式之翻新——不能够直接思考游戏如何盈利,怎么由用户那里得到收益,也足以考虑内容收费、广告收费等模式,未来应有用户是免费的,而内容商、广告商收费的模式。

3、分布式客户端数据上传设计

出于分布式,离线式的框架设计,要求我们客户端自行记录数据的别情况,包括新增多少、修改数据与去数据,这样毫无每次同步的早晚,把装有的数据库记录都遍历一浅,然后和服务器记录进行较。这种记录方式,可以极大增强客户端数据上传的性质与快捷性。因为咱们对此广大发明和记录的数据库,可能每次换代的仅仅是同一微一些,这样设计,有利于我们再次好地额处理客户端数据上传。

例如,下面的阐明,就是对一个客户端上传录表的筹划,其中Dept_ID是故来记录不同机构的象征,基本上每个客户端,都起谈得来之一个部门编号,防止数据发生冲突,也有利服务器端的数开展分类查询。

澳门美高梅手机网站 1

脚是局部事实上工作产生的多少记录,我们记录部门ID、表名(发生变化)、对承诺记录的ID(GUID)、修改用户、修改时相当消息。

澳门美高梅手机网站 2

此外,我们还可以组合体系来记录用户登录信息、用户对记录修改的日记,以便我们针对一些至关重要操作进行审计需要。数据库设计如下所示。

澳门美高梅手机网站 3

 

      2、应用企业模式——将自己之游乐上传来应用商店(如Android
Market、Mobile
Market、天翼空间、联通商城、各大硬件厂商的商号)实现致富,包括下载收费或免费+广告之模式,但是由极端、商店的无成熟性,目前实现扭亏为盈或来一定的难度。(不排除神话的创造者)

2、多数据库支持

在分布式的环境下,和劳务端的条件差,部署程序要求进一步简单越好,太复杂的话,增加客户端的动的难度,会大增强保障的资本,因此,一般客户端会选用适应性比较好,又无安装的数据库,如Sqlite就是一个雅好之单机版数据库,还有Access也是很科学的,当然还闹任何的组成部分数据库,不过自己看Sqlite和Access是于好之备选方案。服务器端的数据库,则看事情支撑和应程度来支配,可以打局部对性能支持比较好之数据库中选型,如大型一点底,可选Oracle来举行,其他的可选SqlServer、MySql等数据库。虽然这些数据库部署于辛苦一点,不过反正就发生一致高服务器需要这种装置配置,所以工作难度及工作量不会见死死。

本着多数据库的支撑,也求我们的开销框架能够好好般配,最好以数据库操作层可以透过安排方式展开切换,即使数据库变化也任何种类,也非需变更总体的框架布局,甚至不用转变代码即可兑现自由切换,如数据库框架可以设置如下。

澳门美高梅手机网站 4 

对于地方几乎种植数据库的支撑,一般的话,需要追加不同数据库类型的BaseDAL,由于每个不同数据库都亟待持有一个BaseDAL,那么多一致的操作代码就会见出冗余,因为大部分数据库的根基操作是平等的,只发一部分于特别,需要开展个性化处理,因此对数据看层开展优化规划,得到下面的宏图图,如下所示。

通过框架抽象,这个BaseDAL类代码很少,基本上通用的数据库操作,已经停放了AbStractBaseDAL超级基类进行包装,即使对于片不比数据库操作不同,我们也尽可能抽象放到上面基类了,BaseDAL只需要贯彻有奇之操作即可。

澳门美高梅手机网站 5 

 

     
目前之盈利模式应该处于初级阶段,如果只有依赖这些盈利模式很为难久的活着、发展,虽然眼前之环境既较1年前好不过多,但是也存在多题材。怎么落实盈利、怎么老发展需不停总结暨思考,接下去是我们今年打算尝试和探究的方向,希望大家一起座谈以及交流:

5、分布式客户端数据及服务器端的旅

以和服务器实现同台,需要实现转记录之上传和服务器修改数据的下载两只方向的行事。

转变记录之上传从操作,就是整个历to_upload里面的笔录,把其创新到服务器上即可。

        /// <summary>
        /// 把本地变化的数据记录,同步到服务器上
        /// </summary>
        /// <returns></returns>
        public bool SyncAll()
        {
            List<ToUploadInfo> toList = BLLFactory<ToUpload>.Instance.GetAll();
            int i = 1;
            int total = toList.Count;
            bool success = false;

            foreach (ToUploadInfo toInfo in toList)
            {               
                switch(toInfo.TableName.ToLower())
                {

                    case "m_drugusedetail":
                        success = DealDrugUseDetail(toInfo);
                        if (!success) return false;
                        break;

                      .......................................
                      //其他操作,利用服务器代理对象,实现各个表的数据上传   
                }

                #region 显示进度等处理
                string tips = string.Format("正在同步表 {0}...", toInfo.TableName);
                int step = 0;
                if (total > 0)
                {
                    step = Convert.ToInt32((100.0 / (1.0 * total)) * i);
                }
                if (OnDataDealed != null)
                {
                    OnDataDealed(step, tips);
                }
                i++;

                if (toInfo == null || string.IsNullOrEmpty(toInfo.TableName))
                {
                    continue;
                }
                #endregion
            }

            #region 同步系统关键数据
            if (success)
            {
                //部门
                SynAllDept();

                //已上传数据表同步
                DealUploaded();

                SyncBasicData();
            }

            #endregion

            return true;
        }

 为了实现数据上传操作,我们将逻辑封装于一个函数里面,这样方便管理,也有益阅读。

        private bool DealDrugUseDetail(ToUploadInfo toInfo)
        {
            bool success = false;
            DrugUseDetailInfo objInfo = BLLFactory<DrugUseDetail>.Instance.FindByID(toInfo.RecordId);
            if (objInfo != null && objInfo.Dept_ID == Portal.gc.LoginInfo.Dept_ID)
            {
                new DrugUseDetailServiceClient().Using(client =>
                {
                    success = client.InsertUpdate(objInfo, objInfo.ID);
                });

                if (success)
                {
                    RemoveToUploadInfo(toInfo);
                }
            }
            return success;
        }

数据并的下载操作,其实为非为难,就是将数据对应的记录下充斥下来进行判定。

        private void DealInHospital()
        {
            List<InHospitalInfo> list = new List<InHospitalInfo>();
            new InHospitalServiceClient().Using(client =>
            {
                list = client.Find(conditionPilotDept);
            });

            int i = 1;
            int total = list.Count;
            foreach (InHospitalInfo info in list)
            {
                BLLFactory<InHospital>.Instance.InsertUpdate(info, info.ID);
                ShowProgress(total, i++, "住院信息");
            }
        }

 

 

 

    
 1、游戏本身的突破——既然是举行游戏当然从游戏本身来考虑,单机版的生命周期和致富能力比较弱,所以可以向网游方向进步,网游的盈利模式较多,如道具、增值服务等模式,同时可投入更多SNS的素进行结合。

于上篇随笔《Winform开发框架的框架演化》中介绍了几乎种植Winform开发框架,其中有对离线式WCF开发框架的牵线,离线式的WCF开发框架
,就是成了风Winform开发框架的数看方式,又用了WCF分布式数据获得之特点,使得数据可以离线使用,在平等种植业务要求集中化,又要求无影响健康作业操作的运用体系场景下比较符合。本文主要介绍如何以自身的Winform开发框架的总体思路,实现WCF开发框架的离线式的数额上传、更新的同步操作。

     
1、游戏外管——这种是无比抢、最简便的同种植盈利方式,但是差自己之原创和前途营业。

4、数据修改记录自动记录

于地方的to_upload表,我们是将客户端修改的数目记录信息,记录及表里面去,但是这些自然是后台自动记录的,而且这操作是放到基类比较适度,否则每次调用,不极端有利,也正如冗余。

放到基类的操作,我们得统筹一下,否则所有的表都会记录,不管需不需要,这样非可以的。

首先我们在基类BaseDAL(对Sqlite的数据库基类),增加一个变量来记录是否数据库访问基类,需要记录数据库变化信息。

protected bool IsLogToUpoad = false; //表示是否记录变化

对现实事务对象的多寡看,我之Winform开发框架还出提供一个应和之好像来进展操作。

    /// <summary>
    /// 药品信息
    /// </summary>
    public class DrugDetail : BaseDAL<DrugDetailInfo>, IDrugDetail
    {
        #region 对象实例及构造函数

        public static DrugDetail Instance
        {
            get
            {
                return new DrugDetail();
            }
        }
        public DrugDetail() : base("M_DrugDetail","ID")
        {
            this.IsLogToUpoad = true;
            this.sortField = "EditTime";
            this.isDescending = true;
        }

        #endregion
..........................................

为要促成自动记录数据库变化信息,我们要以BaseDAL里冲插入、修改、删除的操作进行特别的拍卖,重载基类的操作,增加对应的拍卖即可,如下代码所示。

        private void AddToUpload(string id, string targetTable, System.Data.Common.DbTransaction trans, int uploadType)
        {
            AppConfig config = new AppConfig();

            ToUploadInfo info = new ToUploadInfo();
            info.EditTime = DateTime.Now;
            info.RecordId = id;
            info.TableName = targetTable;
            info.UploadType = uploadType;
            info.Dept_ID = config.AppConfigGet("Dept_ID"); ;
            info.User_ID = config.AppConfigGet("User_ID");
            Hashtable uploadHash = GetHashByObject(info);
            base.Insert(uploadHash, "SS_ToUpload", trans);
        }

        public override bool PrivateUpdate(object id, Hashtable recordField, string targetTable, DbTransaction trans)
        {
            bool result = base.PrivateUpdate(id, recordField, targetTable, trans);
            if (result && IsLogToUpoad)
            {
                AddToUpload(recordField["ID"].ToString(), targetTable, trans, 1);
            }
            return result;
        }

        public override bool Insert(System.Collections.Hashtable recordField, string targetTable, System.Data.Common.DbTransaction trans)
        {           
            bool result = base.Insert(recordField, targetTable, trans);
            if (result && IsLogToUpoad)
            {
                AddToUpload(recordField["ID"].ToString(), targetTable, trans, 0);
            }
            return result;
        }

出于是面的PrivateUpdate和Inser方法,是兼备派生的换代、插入接口的极度老的函数,所有其他相关函数都见面调用这点儿个底根底函数,
这样尽管核心实现了数据库记录之生成记录了。

 

     
4、游戏买断——目前市场及起了大量收购Android游戏,一次性买断或分成买断,包括源码、版权等等。这样是可短期获得收入,但是对未来马拉松来说是不利于的。

澳门美高梅手机网站 6

     
3、游戏被植入计费代码——目前有一致统份Android的娱乐开始尝试计费代码,但是这样对于用户的心得、游戏性上急需极大的挑战,毕竟目前国内大部分凡是免费或破解版游戏。

脚我们来分析下这种离线式的WCF开发框架,需要开怎样准备工作,来兑现框架的支撑。

     
3、硬件的更新——Android不限定于手机,而应该是不怕携式设备,所以可以多从硬件下功夫,设计还适合各种硬件的游戏软件。

发表评论

电子邮件地址不会被公开。 必填项已用*标注