大家是如何重构已有项目的?怎么进行新的代码/架构设计?

2023-08-30 09:59:17 +08:00
 shinelamla

马上要重构一个项目,但是涉及的点和业务方都不少,一时间不知道从哪里下手和规划。大佬们有什么重构的经验或者相关的书籍可以分享一下?也是可以代码技巧,代码设计,架构设计方面的分享对我也很重要!!

4100 次点击
所在节点    程序员
30 条回复
wangYQ
2023-08-30 17:16:19 +08:00
@shinelamla 重构就是比较麻烦,我的想法是首先要看:
1.需要不要做服务,不需要不做,没那么大量不做。
2.把涉及到的业务完全梳理出来,形成文档,多方确认保证业务没有问题。
3.再确定能不能从全局的视角看一下这个模块的东西能做什么样的设计,能从全局视角看问题和只从这个模块的业务出发得到的设计是两个东西。
4.从影响程度比较轻的地方入手,尽量将重构的影响降到最低。
5.重构的东西的测试要更加严格。
xiangbohua
2023-08-30 17:31:03 +08:00
弄一个项目(后台项目)弄了好几个版本,我的理解重构最关键还是业务,业务,业务,说三遍,业务的重新理解、梳理、改规范的规范,改合并流程的合并流程。
个人的的体会就是,功能加到最后加不动了或者一点需求变更就的改代码,就是因为当前的项目对于业务的理解不够完整,导致无法满足需求的变化。
其他技术上面的,我觉得就是微观的了,代码不工整的写工整,加急写的代码规整一下;预估下数据量,增长快的提前分库分表;设计模式整起来。
shinelamla
2023-08-30 17:36:36 +08:00
@xiangbohua 谢谢分享!
shinelamla
2023-08-30 17:37:26 +08:00
@wangYQ 和你其中有些想法相似,谢谢分享你的想法~
NickHopps
2023-08-30 20:36:13 +08:00
1 、确定重构的目标:功能解耦?性能优化?
2 、深入了解业务:不清楚业务的每个细节很难保证能想出合适的方案
3 、了解常用的重构手法:福勒的《重构》,当成工具书,用到什么看什么
4 、确定是否需要 DT 守护:取决于业务的重要程度、重构的工作量和给的工作量
5 、实施重构:拆解重构目标,一个点一个点思考重构的方案
ypfJavaCoder
2023-08-30 21:43:19 +08:00
下面是个人纯经验分享,希望对你有帮助。

重构目标:之前代码已成为屎山,维护起来牵一发而动全身,现在需要新写代码来提升代码的可维护性、可扩展性、可读性、可观测性。下面是一些技巧:
- 可维护性:避免过度抽象,类、方法、接口满足单一原则;统一规范(某个概念要全链路命名一致,DTO 、BO 、DO 每一层都要定义单独的对象出来便于后续不同层级加字段时不影响其他层级);数据库表预留扩展性字段;
- 可扩展性:如果业务频繁变动,是否可以把业务流程抽象为「配置化 + 核心框架」,后续只需要变更配置和新实现一些约定的接口就行,而不需要改动核心框架,类似于 Spring 帮我们实现了 IoC 的核心框架,我们想扩展只需要配置化或实现扩展点接口( BeanPostProcessor )即可。
- 可读性:写方法要满足单一抽象层次;复杂流程注释写好 1 、2 、3 流程的 what 、why 、how ;
- 可观测性:打好日志;接口入口处统一做好基于错误码(业务异常抛出的特定错误码)的阈值监控,系统异常直接钉钉告警。

重构 SOP:
* 事前:
* 重构代码要对整个业务逻辑有全面的了解,多问几个 why 。
* 要彻底搞通「重构代码逻辑如何闭环、新老数据差异点、新老字段含义映射」这些方面,不能一知半解。
* 对使用的依赖(接口、工具方法)要熟悉它的逻辑。
* 日志打好、打全。
* 测试用例要覆盖全。
* 事中:
* 做好 360 无死角监控告警,且要有灰度策略。
* 灰度放量后仔细观察日志(错误日志)、DB 表中的核心字段(单号、金额、币种、状态),核查字段应不应该有值(有值都有值,要没值都没值)、值对不对(长度、格式、金额是最小单位还是原金额等要求)。
* 事后:
* 出现问题要优先考虑业务影响(统计受影响的订单数、金额,客户感知),然后再去想最坏的打算,如何补救。

重构注意事项
1. 重构时只搞一部分逻辑,不要把多个功能同时重构。要进行任务拆解,按照计划有节奏来。如果系统太复杂,可以拆分为多期,分几期去上线。
> 任务拆分: https://mp.weixin.qq.com/s/lY1djkQGK0e5yMIm4ZnkbQ
2. 重构的时间节奏是否和业务发展相匹配。
3. 先专注于跑通主流程,再钻研细节。
4. 以始为终,做的过程中始终回想重构的目标,避免偏离方向。
BarackLee
2023-08-30 21:54:35 +08:00
看 OP 的描述是还没有开始,那么最先要做的事情是想办法弄清楚业务流程。
找业务的主管部门的老人们买杯奶茶去了解系统是为了解决什么问题的,有哪些需求当初是怎么实现的。
业务了解了,怎么重构,什么设计模式你自然可以信手拈来。
还有一点需要注意的是,要做好紧急预案,负责系统的重构代码肯定会导致业务出问题,你要想好重构系统有 bug 要如何对应,你可不要和我说加班对应。
qiaobeier
2023-08-30 22:08:35 +08:00
怎么新技术怎么来(带薪学习美滋滋)
怎么复杂怎么来
shinelamla
2023-08-31 12:25:26 +08:00
@BarackLee 有问题就回滚,数据层不会动,不需要加班。先出一个大体的方案,了解下失眠上的实现,再看看怎么实现吧
shinelamla
2023-08-31 12:29:12 +08:00
@ypfJavaCoder 感谢,虽然项目不是 java 的,但都很受用,谢谢分享

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX