今天上掘金还翻到了去年立的 FLAG 了,果然 FLAG 这种东西不能乱立,立一个倒一个。不过依循惯例,今年还是要来总结一下。
前记
毕业到今年已经快三年了。一般来讲,毕业三年就该是一个分水岭了,3年的时间有的人选择了转行,有的人成功的成为大佬,有的人还在原地踏步(比如我)。总的来说今年是不太好,伴随着是生活压力的增长,思想和能力并没有得到增长;今年对我来说是狼狈的一年。
去年的FLAG
去年的年度总结,我现在依然还记得。
- 完成公司内一个项目的重构;
- 参与一个开源项目的长期维护;
- 前端基础的重新加强;
结果果然不出我所料的没有实现,2019年连 github 都没提交几次;前端基础还没有得到加强,倒是发现了不少短板;公司的项目重构也只进行到了 80% 。快到年尾时,才发现今年的光阴虚度。
好了,废话不多说了,希望自己明年不要再做井底之蛙。
人生天地之间,若白驹之过隙,忽然而已。
一波三折的重构之路
2018年刚入职的时候,需要对一个传统的 多页HTML 项目进行维护。去年年末,受够了代码里面各种稀奇古怪写法的我萌生了重构项目的想法。找到项目负责人沟通之后,被告知要注意项目进度和项目重构风险。
当时,考虑了一番,只想着做个项目练手就好了。直到在掘金上看到一篇 我是如何将业务代码写优雅的 才坚定了我重构项目的想法, 同时也让我找到了可行之道。
知其然知其所以然
首先,需要回答为什么需要重构?
- 技术欠账是不可避免的;在项目开发过程中,代码中不可避免的出现冗余代码、不规范的写法、过时的API, 重构的目的是为了 解决 这些技术欠账.
- 在进行需求变更的同时,代码也会发生变化,甚至整体的架构也会发生变化; 更新迭代的过程本身就是 量变引起质变 的过程, 重构的目的就是为了 适应 当前的产品形态.
- 新的技术发展, 能带来新的视觉体验, 新的性能提升, 也能给产品带来更多新的 想象空间 .
- 整个行业的发展变化, 也会给用户带来新的操作习惯和新的功能期待, 跟随着产品 需求迭代 , 项目代码也应该适应新的变化.
第二个问题, 重构的背后是什么?
重构只不过是冰山浮在水面上的一角, 真正的冰山是 质量保障 + 项目管理 + 需求管理. 盲目重构不仅会使BUG密集爆发, 也会导致项目进度停滞不前, 项目管理混乱 ,同时需求迭代被迫停止.
所以重构首先需要从以上三个视角拿出对应的解决方案:
- 质量保障 -- 做好单元测试, 同时保留原代码.
渐进式重构&增量开发; - 项目管理 -- 明确功能和重构的优先级,
优先级 = 收益/成本; - 需求管理 -- 需求跟重构是否冲突? 新需求是否可以抛球旧的实现? 重构是否有必要重写?
第三个问题, 重构本身是什么?
业务提炼, 工程设计, 实现优化, 持续更新.
对于前端工程师而言, 代码跟业务息息相关. 要想重构代码,首先需要重构上游的需求输入. 在业务场景中,某些功能是可以复用的, 某些模式是可以分离的, 合理使用 类比 和 抽象的思维可以优化业务的实现逻辑, 提高代码的复用性和可拓展性.
程序设计的重点在于 设计 . 根据已有的实现, 解构出项目架构. 依据SOLID原则合理的利用设计模式完成对业务的抽象和对模块的划分. 推荐阅读: whats the deal with the solid principles 或者中文版.以前我觉得 设计模式 对于前端而言很鸡肋, 但是在重构的过程中, 我发现 合理的设计模式 可以更好的应对需求变更.
在项目维护的过程中, 发现代码中的很多实现都是有问题, 需要我们进行 实现优化. 例如在使用 TableData插件 时, 没有使用 reDraw重绘表格, 而是直接移除 dom 元素, 带来额外的渲染开销. 再举例, 多页应用中为了在多个 HTML 中保持状态的持续, 不得不频繁的请求后端接口以询问状态, 这样带来的 定时器 和 额外的请求 都会让页面性能大大下降, 而如果使用 SPA 完成重构, 就可以在内存中管理这些状态, 轻易的做到同步和保持. 通过对功能的 实现优化 ,以较低的成本完成了需求, 同样也能提高产品的想象力.
在旧代码维护中, 很频繁的可以看到大段的注释代码, 旁边还有说明. XXXX功能暂时遗弃 -- 2017.xxx 很显然这部分代码自从2017年之后就没有动过了, 而且也很明确的说明了原因. 但是遗憾的是, 这部分代码放开注释后, 完全跑不起来. 事实上, 随着产品的不断迭代, 很多接口\字段\业务 都发生了改变, 而这些本来属于 合理冗余 的代码就应该被遗弃或者 更新.另一方面, 我们引入的外部依赖也应该及时更新, 一方面可以提高代码的安全性, 减少BUG的出现, 另一方面, 把 代码重构 的压力, 分解到每次的业务迭代中. 我们应该拒绝 一蹴而就.
回顾
种豆南山下, 草盛豆苗稀.
晨兴理荒秽, 带月荷锄归.
道狭草木长, 夕露沾我衣.
衣沾不足惜, 但使愿无违.
很显然2019年已经过去了, 我们也已经踏上了新的征程.
所经历的一切, 到最后都会变成光, 照亮你前行的路.
一时的彷徨和迷茫, 也算不了什么, 终究是少年人.
愿诸位一起:
只争朝夕, 不负韶华