求高手解答重构问题。

ganjianh8 2011-07-21 10:14:29
最近在重构一个项目
里面的函数写的稀烂
没有任何需求文档以及技术文档,重写这些就不要说了,只能看里面的代码进行逻辑分析,然后再重构
里面一个函数大概有1000~2000行左右
而且很多变量作用域都是整个函数的,但实际使用域只有一个逻辑域里用(譬如if()里用到,前面、后面都用不上,但定义放在函数进口,而且这些变量很多,有些变量是全局的,放得毫无规律很难区分)
重构时间大约只有5个工作日。
求高手给个方法
最好给个相关实例讲解。
这个项目大概有几万行代码。
...全文
180 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
品茶 2011-08-01
  • 打赏
  • 举报
回复
1.根据实现的功能写好相关函数的伪代码
2.从老代码中提取相关的实现代码

这样所有变量都是自己定义的,思路会比较清晰
根据实现功能找相关代码,不会陷入逻辑混乱
zhangxfeng112 2011-07-29
  • 打赏
  • 举报
回复
我以前用几百行代码,替换别人7-8千行,
主要还是 改了算法,用另一种更好的思路,去分析解决问题。
zhangxfeng112 2011-07-29
  • 打赏
  • 举报
回复
你有更优的算法去实现别人原来要实现的功能么?

如果你的算法跟原来的一样,改不改的没多大意思,就是浪费时间。还不如补充一下文档。还有注释。

好的代码,要求准确,执行效率高,行多行少都是次要的。
ganjianh8 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhao4zhong1 的回复:]
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。
[/Quote]
这就不是重构了
是跟在代码加空行和缩进一样
赵4老师 2011-07-26
  • 打赏
  • 举报
回复
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。
ganjianh8 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 benben2301 的回复:]
修改代码比写代码要头疼,特别是在没有文档的情况下,不小心就会出bug。。。。
[/Quote]
所以修改代码走得步伐要比写代码小很多,并且要非常谨慎
这样是为了降低风险

但老板在程序维护人员待遇上跟程序开发新东西的人员上差不多。
  • 打赏
  • 举报
回复
修改代码比写代码要头疼,特别是在没有文档的情况下,不小心就会出bug。。。。
赵4老师 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ganjianh8 的回复:]
引用 16 楼 zhao4zhong1 的回复:
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。

这就不是重构了
是跟在代码加空行和缩进一样
[/Quote]
如果你认为“修改变量的命名使其有规律和好区分”不是代码重构的话,我只能无语了。
ma100 2011-07-26
  • 打赏
  • 举报
回复
但定义放在函数进口,而且这些变量很多,有些变量是全局的,放得毫无规律很难区分)

如果是C语言只能放在最前, 想重构就只能拆这个函数为多个
ma100 2011-07-26
  • 打赏
  • 举报
回复
5天改几万行怎么可能, 只改你说的那个函数到可以
FrankHB1989 2011-07-26
  • 打赏
  • 举报
回复
别重构了,重写吧。
ganjianh8 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zhang20072844 的回复:]
还是先看懂,实现什么功能
[/Quote]
就因为逻辑太长,很难看懂
给你一个几千行的函数,你去慢慢分析其中的逻辑就很辛苦
而且嵌套很深的区域里来个break;或者continue;都够你受的了。
AndyZhang 2011-07-26
  • 打赏
  • 举报
回复
还是先看懂,实现什么功能
ganjianh8 2011-07-22
  • 打赏
  • 举报
回复
而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。
ganjianh8 2011-07-22
  • 打赏
  • 举报
回复
里面用到很多业务上的东西
譬如数据库的查询
传输协议之类的,并且没有需求文档,
推到重来很困难
ganjianh8 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 reckhou 的回复:]
引用 11 楼 ganjianh8 的回复:

而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。


return绝对是好事啊,函数出口
[/Quote]
你重构的时候,就是把一个分支封装到一个函数中去,结果return只跳出封装的函数,而跟原来跳出最上层的函数有逻辑冲突
除了return,还有continue,break之类的也要注意。
如果封装太多东西的话,自己写的封装函数入参就变得很多,这也是得不偿失的做法。
reckhou 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ganjianh8 的回复:]

而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。
[/Quote]

return绝对是好事啊,函数出口
至善者善之敌 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 taodm 的回复:]
建议楼主就别重构了。
你做好了为重构过程引入的错误负责的准备没有?
有一个4格漫画叫“天堂里没有程序员”
[/Quote]

我觉得也是,了解这个函数功能是什么
推倒重来,不破不立,按自己的思路写一个,说不定1~2天就搞定
jernymy 2011-07-21
  • 打赏
  • 举报
回复
将里边的很多接近重复的代码封装函数,然后精简在精简
taodm 2011-07-21
  • 打赏
  • 举报
回复
建议楼主就别重构了。
你做好了为重构过程引入的错误负责的准备没有?
有一个4格漫画叫“天堂里没有程序员”
加载更多回复(6)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧