游戏研发(策略+sass+回调模式)

前言

        由于这边需要对接游戏研发后台,基本就是开服,封禁.角色日志等,但是每个游戏提供的接口都是不一样的,所以为了统一处理提前进行sass封装,以便后续可以更好的兼容

        

        同时还涉及了多数据源的问题,因为有些日志太大不可能直接去http调用,会使用直接查询游戏研发的数据库方式这一块依然可以进行封装

        

        这里只讨论开发\封禁\角色日志\聊天记录等,其他的接口和功能都是类似的,这里主要是讨论设计方案

前提设计数据库表

游戏表(核心)

idgame_coderoot_pathapp_key
主键id游戏编码(核心)游戏请求根路径游戏密钥
1zxcGamehttp://192.168.0.1/pathsdfsdfdsfdf

服务器器(sass)

idserver_idgame_idstatus
主键id服务器id关联的游戏id状态 0-闭服 1-开服
110004510

Http设计方案

涉及类图

相关描述

AbstractGameCall:  用于抽象定义,并封装了子类可以通用的方法,比如getGame()

ForestImpactGameCallImpl: 其中一个实现子类, 这里是封装的意义,子类实现自己逻辑即可

ForestImpactHttpUtils: 跟子类相匹配的Http请求类,与游戏具体的对接

GameCallContext:  接口上下文, 客户端只需要跟这个类打交道即可

         

        这样的设计以后如果有其他的游戏对接,只需要提供对应的实现和http实现类即可,项目内部会通过getGameCode()方法获取到具体的实现类,这里是唯一需要匹配的地方,抽象类提供的getGame()也是给子类提供了便利,因为gameCode是唯一值所以是可以这样去做的

sass方面设计

        主要存在于以下的几方面

1:  通过getGameCode便可以实现getGame通用方法,进而在进行http调用时,可以获取到具体的appKey进行加密处理,以及rootPath根请求

2: 假设在进行服务器修改状态时,那么就可以根据服务器绑定的gameId获取到具体的实现类,然后再进行相应的处理,只需要在入库时绑定这个关联即可

3: 对外暴露接口时需要对方传递一个固定的gameId参数,那么就可以把接口根据不同游戏来查询数据进行返回,以及解密也可以通过这个来进行自动的匹配

4: 以上几点保证了后续如果有新游戏只需要对提供实现类即可,底层的逻辑是不需要进行调整的

可能存在问题

        解设不同游戏有不同参数,那么也可以在调用过程中通过添加参数,然后子类进行相应的处理即可,当然了还可以提供回调函数的方式让不同实现类进行传输,如果没有多余参数不进行涉及即可

多数据源数据设计方案

        其实逻辑跟上面差不多的,只是像角色信息、聊天信息、用户日志等这部分日志过大,不是很适合用http传递过来,一个是数据量过大,一个是这边也没有那么多的磁盘来存储数据

       

        所以这个就需要依赖对方提供数据库,然后我们这边到不同的数据库中进行数据的获取了,但是仍然可以复用sass的功能对gameId区分然后进行处理

        大概结构也是差不多的,到时看看有时间就补上来一下,待定

结语

        其实用了很多设计模式后发现很多时候都跟抽象类、策略、模板等基本模式脱不了关系,个人认为设计模式绝对是有利于编码的,因为在思考的过程中会自然的把一些可以通用的逻辑封装起来,比如getGame(), 以及appKey和rootPath的获取

       

        如果有合适的场景,也建议大家可以考虑一下如何进行设计,在以后的开发中会带来比较大的变化,比如在下一个游戏的对接,只需要实现子类即可了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零实现KV存储项目实战

本项目是从零实现一个完整的、兼容Redis协议的KV数据库项目。 通过每一行代码的编写。你会对整个系统了如指拿,这样对自己基本功的锻炼、对编程能力的提升都是很大的 项目提供完整的视频教程代码 下面是关于KV存储项目的技术大纲: 如果你在学习的过程…

BUAA-2024年春-OO第四单元总结

正向建模与开发 在本单元中,我们需要模拟一个小型的图书管理系统,完成图书馆所支持的相关业务,并遵守一定的规章制度。与前几次不同的是,本单元中,我们需要预先将自己的设计思路用UML来实现,然后进行编程。…

Ecovadis审核的内容

Ecovadis审核的内容。Ecovadis是一家国际性的企业社会责任评估机构,旨在为全球供应链的可持续性发展提供评估和审核。在本文中,我们将从以下几个方面详细介绍Ecovadis审核的内容: 一、Ecovadis审核的范围和目的 Ecovadis审核的范围涵盖了各个…

EMI电路

PFC 功率部分 1 、整流桥是串联 2 、 PFC 电感串联 3 、二极管并联 4 、 MOSFET 并联 EMI电路图

C++中的结构体——结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体 例如:每一个老师辅导一个学生,每个老师的结构体中,记录一个学生的结构体 示例 运行结果

springboot二屯村钓鱼场管理系统-计算机毕业设计源码58167

摘 要 在互联网时代的来临,电子商务的骤起,一时间网络进行购物这一形式备受欢迎,到现在,网购更是普及。现如今各个行业也通过网购的方式来进行拓展业务,增加企业的知名度以及提升业绩,满足了用户像网购一样…

云原生应用开发培训,开启云计算时代的新征程

在云计算时代,云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域,我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布(CI/CD&#…

单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作

单细胞测序技术是在单个细胞水平上,对基因组、转录组和表观基因组水平进行分析测序技术。bulk RNA-seq获得的是组织或器官等大量细胞中表达信号的均值,无法获取细胞之间的差异信息(即丢失了细胞的异质性), 而单细胞测序…

【数组】【双指针】三数之和

打算冲一把算法类比赛,之前一直对算法提不起兴趣,也有我自己对它的抵触,本身算法也比较菜。 但现在打算勤勤恳恳刷题,踏踏实实总结,冲! 数组——双指针 三数之和 该题力扣网址 错误做法 三重循环框架&a…

第十五篇——条件熵和信息增益:你提供的信息到底值多少钱?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 通过这篇文章,我知道了条件熵和信息增益;如果你试…

水电站大坝安全监测工作详解

水电站大坝安全监测是确保大坝结构安全和操作安全的关键组成部分。本文将详细解释水电站大坝安全监测的9项主要工作内容,帮助理解其重要性和执行过程。 1) 现场监测 现场监测是水电站大坝安全监测的首要步骤。监测人员需要定期对大坝的物理结构进行检查,…

vite构建的ts项目配置src别名@

一、安装types/node npm install types/node 二、vite.config.ts 文件中配置以下内容 resolve: {alias: {: path.resolve(__dirname, ./src),},}, 三、 tsconfig.json 文件中compilerOptions下配置以下内容 /* 配置 */"baseUrl": ".","paths":…

【Python】详解pandas库中pd.merge函数与代码示例

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

高考志愿填报秘籍:个人篇

选择适合自己的大学和专业,对广大考生来说至关重要。从某种程度上来说,决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿,选择适合自己的大学和专业,本公众号将推出如何用AI填报高考志愿专栏文章…

清远mes系统开发商 盈致科技

清远MES系统开发商盈致科技为企业提供专业的MES系统解决方案,帮助企业实现生产过程的数字化管理和优化。盈致科技的服务范围包括但不限于以下方面:MES系统定制开发:盈致科技可以根据清远企业的实际需求定制开发适合的MES系统,满足…

defer关键字

【1】defer关键字的作用: 在函数中,程序员经常需要创建资源,为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer关键字 【2】案例展示: 【3】代码变动一下,再次看结果: 发…

智慧大屏是如何实现数据可视化的?

智慧大屏,作为数据可视化的重要载体,已在城市管理、交通监控、商业运营等领域广泛应用。本文旨在阐述智慧大屏实现数据可视化的关键技术和方法,包括数据源管理、数据处理、视觉编码、用户界面与交互设计等。 大屏通过接入企业内部的数据库系…

openlayers 绘图功能,编辑多边形,modify组件的使用(三)

前两篇介绍了 openlayers 中 draw 的使用,自定义了绘制中和绘制结束后的样式,绘制结束后可以获取到绘制图形的featue或者进一步获取轮廓坐标(如下),可以进行坐标保存或者将feature添加到其他层进一步自定义显示 draw.value.on("drawend…

arxiv提交报错解决指南

- 编译时无错误 - 所有文件和图片文件都在同一目录下 - 生成.bbl文件 overleaf将参考文献格式bib转bbl(bibitem)_overleaf bbl文件-CSDN博客 - .tex文件、.bib文件、.bbl文件 的文件名要一致,修改.bib文件名记得在.tex文件中修改bibliograp…