最近游戏开发业务少了,我就开启了重构运营系统的行动了。先说一下背景,运营系统是个很多人接手过的项目,代码风格迥异,因为团队没有review机制,以前后台的同学都是怎么方便怎么来,完成任务就万事大吉了。

因为公司的业务,这里不会贴上代码,大致描述一下在代码结构上主要存在的问题:

  1. 代码为了复用而复用,没有语义,没有遵循单一责任原则。
  2. 重复性代码太多,相同逻辑的代码直接copy修改。业务层接口粒度太大,有很多可以进行垂直拆分的公共代码。
  3. 重复的、有更好替代的工具类/公共类太多。见过最经典的一个例子:一个IO流异常处理的代码片段直接放在一个工具类进行复用,并且只有两三处调用。
  4. 上帝类。一个公共类想做的事情太多就意味着引入了过多的依赖,修改依赖的代码很容易影响已有的业务。

按照上面的问题,反推重构方案:

  1. 将看到的没有语义或不规范的api先进行inline处理,在按照实际情况判定是否进一步提取公共api。
  2. 将业务层显眼的公共代码片段按语义进行提取,遵循单一责任原则,对业务进行垂直划分。
  3. 将可以用开源工具类(guava、common-utils、spring-utils)替代的直接删除,用开源工具类替代,将业务无关并且简单实现已经没有调用的接口、工具类移除。
  4. 将上帝类水平拆分,按照domain水平拆分到应有的位置,不能做拆分和过多依赖的服务,尝试将服务下沉做公共服务。

因为只是代码结构变化,并没有修改业务的实现,通过现代的IDE是可以直接进行操作的,但是需要逐步review和按模块进行version control。

运营系统指责单一,业务量不大并且按照实际的业务情况不需要做服务拆分和集群,资源占用太大的调度可以单独拆分出来,开多个实例处理。这个小型系统的形状其实跟游戏后端一样,在宏观上是十分内聚的。(目前研发的游戏也是单一进程的)但从微观上讲,良好组织的代码应该像组件化、服务化的服务一样,对内聚合、对外松散。从宏观上看,大型服务架构系统其实也应该这样。每个服务就像游戏开发的组件、小型系统的模块一样,是独立自治的。只不过业务的调度不会在一个进程、单机内,可能是多点的、集群的甚至多地的。得益于中间件技术,将这些服务按实际的商用业务串联起来。在不同的角度,可以说它们按结构来看是极度松散的,也可以说他们高度内聚的。按宏观上来看,后端开发其实是相似的,只是面对实际要解决的问题各有各的不同,按实际情况选择最优解罢了。本人拙见,贻笑大方。

转载于:https://www.cnblogs.com/jason-koo/p/11055985.html

重构了一波代码,聊聊后端也聊聊游戏后端相关推荐

  1. 经验总结 | 重构让你的代码更优美和简洁

    1. 前言 最近,笔者有幸对高德打车订单Push项目进行了重构,与大家分享一下代码重构相关的工作经验,希望对大家有所启发. 有时候,我们在做某个功能需求时,需要花掉大量的时间,才能找到和需求有关联的代 ...

  2. 重构-改善既有代码的设计:重构原则(二)

    1.什么是重构 重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性.可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化. 2.为何重构 ...

  3. 《重构-改善既有代码设计》读书笔记-重构篇

    2019独角兽企业重金招聘Python工程师标准>>> 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本.--<重 ...

  4. 重构—改善既有代码的设计

    概述 1.1 参考资料 <重构-改善既有代码的设计>读后总结 <重构改善既有代码的设计> 22种代码的坏味道,一句话概括 1.2 何谓重构 首先要说明的是:视上下文不同,重构的 ...

  5. PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性

    思维导图 索引: Ø Move Method(搬移函数) Ø Move Field (搬移值域) Ø Extract Class (提炼类) Ø Inline Class (将类内联化,就是把当前的类 ...

  6. 『重构--改善既有代码的设计』读书笔记----序

    作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅.但唯独『重构--改善既有代码的设计』这本书让我重复看了 ...

  7. PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据

    介绍 承接上文的PHP 杂谈<重构-改善既有代码的设计>之 重新组织你的函数继续重构方面的内容. 这章主要针对数据的重构. 1.争论的声音--直接访问Field还是通过函数(Accesso ...

  8. 重构 改善既有代码的设计:代码的坏

    以下内容来自<<重构 改善既有代码的设计>> 一.什么是重构 所谓重构(Refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改以改进程序的内部结构 ...

  9. 《重构-改善既有代码的设计》-第1例:租赁影片(2)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 上接  重构-改善既有代码的设计-第1例:租赁影片(1) 2  运用多态取代与价格相关的条件逻辑 2 ...

最新文章

  1. 运行cmd直接进入指定目录下的命令
  2. onInterceptTouchEvent和onTouchEvent调用时序
  3. C语言求数组中的最大值
  4. SpringBoot_入门-Spring Boot简介
  5. IIS识别Json文件
  6. Python is 和 == 区别 - Python零基础入门教程
  7. Java求两个数的最大公约数
  8. JavaScript 中的垃圾回收和内存泄露如何处理?| 技术头条
  9. 黑马程序员pink老师_CSS学习笔记
  10. 适合智能电视的K歌神器,纯麦U7PRO麦克风体验
  11. 《符号学:原理与推演》引论
  12. 电脑网页如何截取全图(长图)
  13. 电力电子技术课程设计matlab,电力电子技术课程设计-基于matlab的单相交流调压电路的设计与仿真.doc...
  14. cmd无法打开jupyter notebook问题
  15. 程序员如何实现“互联网+”03-为什么需要有个网站
  16. 电容的参数-详细描述
  17. 清华博士接亲被要求现场写代码,5 分钟做出一颗爱心樱花3D相册(HTML+CSS+JavaScript)
  18. 哲理故事300篇 上
  19. 鼎利测试软件多少钱_鼎利测试软件窗口详细说明.docx
  20. 连锁不平衡的计算以及LDSC分析多基因遗传

热门文章

  1. 《告别失控:软件开发团队管理必读》一一2.6 代系特点
  2. Asp.net导出Excel
  3. 95、Jenkins部署.net持续集成自动化测试环境
  4. Android - Manifest 文件 详解
  5. 大型企业网络运维,ACL,VTP,NAT,vlan.总合。
  6. 洛谷P3688/uoj#291. [ZJOI2017]树状数组
  7. 移动IM开发指南3:如何优化登录模块
  8. JavaScript中 DOM操作方法
  9. Garbage First(G1)垃圾收集器
  10. SQL触发器实例(上)