运营期游戏项目重构实践复盘

已上线的功能,谨慎确认其是否需要重构

通常目前游戏项目很少实践自测试代码,并且集成测试大量依赖手工测试,在这种情况下,开发人员重构带来的风险往往大于收益。
因为如果这个功能已经上线,那么重构之后被破坏,可能会引起玩家大量的投诉。
比较好的做法是准确地分离出新内容与旧内容的边界,让新内容与旧内容完全隔离。

遇到冗余代码,难道就故意冗余?

经常想重构是因为新开发的系统与旧系统有很多共用的代码。如果发现新系统可以直接用旧系统的代码,这时候可以将旧系统的一些功能抽离到一个公共的新模块,由新旧系统共同引入。

这里必须小心,你不能改变旧系统功能的逻辑。因此只做一些安全的操作,例如和旧系统完全一致的类、数据格式,以及无副作用的函数。

什么时候不应该重构?

之前我遇到过的一个需求,一个旧的玩法需要用新的一套UI,但其逻辑完全不变。
而我看到这个玩法系统的代码将数据和表现耦合在一块,因此后面对旧玩法的数据、表现层代码进行了彻底的重构。重构之后,原先旧的玩法进行了大量的测试,耗费了不少时间和精力。
事后复盘,其实更优的做法应该是:在旧代码的基础上,将引用UI控件路径的代码抽离成一个单独的struct,

为什么这样做更优?因为struct不带行为,只存储数据,新旧UI用存储了各自UI空间引用路径的struct代替,并被原先的旧系统代码使用。这样做到了

  • 完全不动到原先玩法的逻辑,无需回归测试,开发效率是最高的。
  • 满足了新的需求的目的
  • 代码兼容旧的UI。

所以这里的问题应该是重构的边界问题,这个需求需要重构的部分仅仅是旧代码对UI引用的部分,而不是整个旧系统。过度重构带来的问题就是影响到旧系统的代码,带来系统被破坏的风险以及进度上的延误。

已上线代码的类给予了不想要的数据和行为该怎么做?

如果新开发的内容继承自一个旧的类,而此时不需要这个类附带的某些数据和行为时,这个时候该怎么做?

比较好的做法应该是抽离出一个新的基类,新的基类包含新类想要的数据和行为。

参考资料

  • 《重构:改善既有代码的设计(第2版) 》

运营期游戏项目重构实践复盘相关推荐

  1. 互联网运营期产品评审杂思,互联网营销

    评审制度是互联网产品管理的重要手段,评审制度贯穿于产品管理的战略规划.产品设计.技术实现.产品运营.产品营销等各个环节.可以说高效的评审制度是一个公司产品管理能力的重要度量标准.简单列举一下评审制度的 ...

  2. 网易云音乐数仓治理之数据任务重构实践

    云音乐数仓在经历了前期混沌摸索,中期建设完善,如今已逐步形成了一套适合自己的数仓体系和建设规范.增量模型及任务全部走线上设计评审流程,但仍有大量历史任务"年久失修"等待治理.本文以 ...

  3. 神策数据《品牌零售业数字化运营的方法论及实践》白皮书重磅发布

    随着流量红利见顶,公域营销成本越来越高,去中心化的流量逐渐成为富矿,深耕存量市场的私域流量,成为品牌零售行业数字化运营的新红利.同时,品牌零售企业越来越认识到消费者为中心的重要性,如何围绕用户构建消费 ...

  4. 一次简单易懂的多态重构实践,让你理解条件逻辑

    本文分享自华为云社区<简单易懂的多态重构实践>,作者:JavaEdge . 1 动机 复杂的条件逻辑是编程中最难理解的东西之一,因此我一直在寻求给条件逻辑添加结构.很多时候,我发现可以将条 ...

  5. 运营商数据治理实践-郭岳

    2019独角兽企业重金招聘Python工程师标准>>> 运营商数据治理实践-郭岳 大数据时代的业务支撑面临"运维,管理,增值"三大压力,个开发,架构,运维体系都难 ...

  6. 微知库计算机应用基础,《现代职业教育》杂志2021年第2期改革探索实践栏目重点选题...

    <现代职业教育>杂志2021年第2期改革探索实践栏目重点选题 1.以学生发展为本的中职语文课堂教学改革探讨 2.中职机械加工实训教学改革的路径分析 3.机械制造及自动化专业控制类课程的教学 ...

  7. 掘金者说-第11期-硬核之复盘管理

    第一季-思想篇 第1期 个人性格 第2期 求知欲 第3期 人和领导力对拓展性的影响 第4期 个人的经验 第5期 可劲学开源佩格 第6期 反障碍 第7期 双活工程师 第8期 为圆满的人生作准备 第9期 ...

  8. 自媒体短视频运营如何度过试运营期?

    自媒体短视频运营如何度过试运营期? 大家好,我是我赢助手,专注于自媒体短视频去水印.去重和文案提取运营! 试运营期,很多人的思路就是注册账号,发视频赚取流量.然而实际操作中,你会发现,做自媒体根本不是 ...

  9. 微信 Android 模块化架构重构实践

    微信Android架构历史 微信Android诞生之初,用的是常见的分层结构设计.这种架构简单.清晰并一直沿袭至今.这是微信架构的v1.x时代. 图1-架构演进 到了微信架构的v2.x时代,随着业务的 ...

最新文章

  1. 字段变成小写 序列化_序列化/反序列化
  2. python太阳花绘制
  3. 剖析Caffe源码之Net---Net构造函数
  4. 医疗设备-呼吸机-数据解析
  5. RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性)
  6. 区块链技术的发展现状_区块链的现状及其发展趋势
  7. shell基础之shell相关概念
  8. 设计模式-1-单例模式
  9. 【电路仿真】基于simulink三相相控变流器设计【含Matlab源码 327期】
  10. android studio for android learning (二十八) android基础知识
  11. c语言学生教务管理系统,c语言教务管理系统.doc
  12. 物联网产品中选择服务器的重要性
  13. 计算机与音乐整合的教学设计,小学音乐课程整合研究《郊游》优秀教学设计
  14. 80后最牛的辞职信+出师表
  15. 特斯拉充电电流设置多大_特斯拉再次升级Model S 充电状况不稳时自动降低电流...
  16. word 去除 文字 浅灰色背景
  17. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
  18. k210 C语言开发-3 使用SD卡
  19. THREEJS在场景图上动态标识一些文字方法二(文字精灵sprite)
  20. 华为到底算不算是一份好工作?看完你们还会羡慕华为的高薪吗?

热门文章

  1. HDR渲染器的实现(基于OpenGL)
  2. 5月英语总结--I will do it well.
  3. 推荐几个代码自动生成器
  4. 在centos查看服务器物理地址,查看centos服务器的子网掩码和网关
  5. 估值77.5亿美金的虚拟线上活动工具 #Hopin 让世界感觉更亲近
  6. android 国内 更新方法,手机安卓系统怎么升级 安卓系统更新升级的三种方法介绍...
  7. mac电池最大充电限制工具:AlDente mac中文免费版
  8. In on deep learning
  9. zabbix3.4 监控路由器报错No Such Instance currently exists at this OID
  10. spring ORM是什么,spring的七大模块有哪些