运营期游戏项目重构实践复盘
运营期游戏项目重构实践复盘
已上线的功能,谨慎确认其是否需要重构
通常目前游戏项目很少实践自测试代码,并且集成测试大量依赖手工测试,在这种情况下,开发人员重构带来的风险往往大于收益。
因为如果这个功能已经上线,那么重构之后被破坏,可能会引起玩家大量的投诉。
比较好的做法是准确地分离出新内容与旧内容的边界,让新内容与旧内容完全隔离。
遇到冗余代码,难道就故意冗余?
经常想重构是因为新开发的系统与旧系统有很多共用的代码。如果发现新系统可以直接用旧系统的代码,这时候可以将旧系统的一些功能抽离到一个公共的新模块,由新旧系统共同引入。
这里必须小心,你不能改变旧系统功能的逻辑。因此只做一些安全的操作,例如和旧系统完全一致的类、数据格式,以及无副作用的函数。
什么时候不应该重构?
之前我遇到过的一个需求,一个旧的玩法需要用新的一套UI,但其逻辑完全不变。
而我看到这个玩法系统的代码将数据和表现耦合在一块,因此后面对旧玩法的数据、表现层代码进行了彻底的重构。重构之后,原先旧的玩法进行了大量的测试,耗费了不少时间和精力。
事后复盘,其实更优的做法应该是:在旧代码的基础上,将引用UI控件路径的代码抽离成一个单独的struct,
为什么这样做更优?因为struct不带行为,只存储数据,新旧UI用存储了各自UI空间引用路径的struct代替,并被原先的旧系统代码使用。这样做到了
- 完全不动到原先玩法的逻辑,无需回归测试,开发效率是最高的。
- 满足了新的需求的目的
- 代码兼容旧的UI。
所以这里的问题应该是重构的边界问题,这个需求需要重构的部分仅仅是旧代码对UI引用的部分,而不是整个旧系统。过度重构带来的问题就是影响到旧系统的代码,带来系统被破坏的风险以及进度上的延误。
已上线代码的类给予了不想要的数据和行为该怎么做?
如果新开发的内容继承自一个旧的类,而此时不需要这个类附带的某些数据和行为时,这个时候该怎么做?
比较好的做法应该是抽离出一个新的基类,新的基类包含新类想要的数据和行为。
参考资料
- 《重构:改善既有代码的设计(第2版) 》
运营期游戏项目重构实践复盘相关推荐
- 互联网运营期产品评审杂思,互联网营销
评审制度是互联网产品管理的重要手段,评审制度贯穿于产品管理的战略规划.产品设计.技术实现.产品运营.产品营销等各个环节.可以说高效的评审制度是一个公司产品管理能力的重要度量标准.简单列举一下评审制度的 ...
- 网易云音乐数仓治理之数据任务重构实践
云音乐数仓在经历了前期混沌摸索,中期建设完善,如今已逐步形成了一套适合自己的数仓体系和建设规范.增量模型及任务全部走线上设计评审流程,但仍有大量历史任务"年久失修"等待治理.本文以 ...
- 神策数据《品牌零售业数字化运营的方法论及实践》白皮书重磅发布
随着流量红利见顶,公域营销成本越来越高,去中心化的流量逐渐成为富矿,深耕存量市场的私域流量,成为品牌零售行业数字化运营的新红利.同时,品牌零售企业越来越认识到消费者为中心的重要性,如何围绕用户构建消费 ...
- 一次简单易懂的多态重构实践,让你理解条件逻辑
本文分享自华为云社区<简单易懂的多态重构实践>,作者:JavaEdge . 1 动机 复杂的条件逻辑是编程中最难理解的东西之一,因此我一直在寻求给条件逻辑添加结构.很多时候,我发现可以将条 ...
- 运营商数据治理实践-郭岳
2019独角兽企业重金招聘Python工程师标准>>> 运营商数据治理实践-郭岳 大数据时代的业务支撑面临"运维,管理,增值"三大压力,个开发,架构,运维体系都难 ...
- 微知库计算机应用基础,《现代职业教育》杂志2021年第2期改革探索实践栏目重点选题...
<现代职业教育>杂志2021年第2期改革探索实践栏目重点选题 1.以学生发展为本的中职语文课堂教学改革探讨 2.中职机械加工实训教学改革的路径分析 3.机械制造及自动化专业控制类课程的教学 ...
- 掘金者说-第11期-硬核之复盘管理
第一季-思想篇 第1期 个人性格 第2期 求知欲 第3期 人和领导力对拓展性的影响 第4期 个人的经验 第5期 可劲学开源佩格 第6期 反障碍 第7期 双活工程师 第8期 为圆满的人生作准备 第9期 ...
- 自媒体短视频运营如何度过试运营期?
自媒体短视频运营如何度过试运营期? 大家好,我是我赢助手,专注于自媒体短视频去水印.去重和文案提取运营! 试运营期,很多人的思路就是注册账号,发视频赚取流量.然而实际操作中,你会发现,做自媒体根本不是 ...
- 微信 Android 模块化架构重构实践
微信Android架构历史 微信Android诞生之初,用的是常见的分层结构设计.这种架构简单.清晰并一直沿袭至今.这是微信架构的v1.x时代. 图1-架构演进 到了微信架构的v2.x时代,随着业务的 ...
最新文章
- 字段变成小写 序列化_序列化/反序列化
- python太阳花绘制
- 剖析Caffe源码之Net---Net构造函数
- 医疗设备-呼吸机-数据解析
- RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性)
- 区块链技术的发展现状_区块链的现状及其发展趋势
- shell基础之shell相关概念
- 设计模式-1-单例模式
- 【电路仿真】基于simulink三相相控变流器设计【含Matlab源码 327期】
- android studio for android learning (二十八) android基础知识
- c语言学生教务管理系统,c语言教务管理系统.doc
- 物联网产品中选择服务器的重要性
- 计算机与音乐整合的教学设计,小学音乐课程整合研究《郊游》优秀教学设计
- 80后最牛的辞职信+出师表
- 特斯拉充电电流设置多大_特斯拉再次升级Model S 充电状况不稳时自动降低电流...
- word 去除 文字 浅灰色背景
- 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
- k210 C语言开发-3 使用SD卡
- THREEJS在场景图上动态标识一些文字方法二(文字精灵sprite)
- 华为到底算不算是一份好工作?看完你们还会羡慕华为的高薪吗?
热门文章
- HDR渲染器的实现(基于OpenGL)
- 5月英语总结--I will do it well.
- 推荐几个代码自动生成器
- 在centos查看服务器物理地址,查看centos服务器的子网掩码和网关
- 估值77.5亿美金的虚拟线上活动工具 #Hopin 让世界感觉更亲近
- android 国内 更新方法,手机安卓系统怎么升级 安卓系统更新升级的三种方法介绍...
- mac电池最大充电限制工具:AlDente mac中文免费版
- In on deep learning
- zabbix3.4 监控路由器报错No Such Instance currently exists at this OID
- spring ORM是什么,spring的七大模块有哪些