关于软件重构

实现的妥协

记得刚开始工作那会,也正好是项目刚起步不久,我总是觉得公司原有的代码脏乱差,架构混乱,完全不符合我们在书上看到的标准。一直有把项目代码重构一番的念头。
工作几年后开始逐渐明白了一个道理,写代码不是造艺术品。代码的本质是功能的实现,在bug可控,能满足用户需求的前提下,其实并不需要那么完美。
打造完美的代码是需要成本的,在项目前期,人少活多,一个人顶三个人用,怎么也写不出花样来。这个阶段主要的目标就是尽快实现功能,抢占市场。那在设计和实现上必然会有妥协。

该不该重构

当你想重构现有代码的时候,需要问自己三个问题

  1. 重构的目的是什么?
    为了换新框架增长技能还是对项目真的有益
  2. 现有的架构是否严重的制约了后续功能的开发和性能支撑?
    如果是,那重构就非常有必要。在项目进行到某一阶段的时候,由于产品的策略调整,会带动功能在原有的基础上有较大改动。如果现有架构无法满足新策略,那么就到了必须要重构的时候。但前提是重构后的代码结构确实要优于现有的,所以重构前要做充分的评审。
  3. 是否有时间,有人力去重构?
    即使满足上面的第一条件,但是项目上根本就不给足够的时间和人员去做这个事情,那也是无法完成的。从新架构的设计到评审,需要花费很多的时间。在重构的过程中,还得将原有的功能保质的迁移过来,又得花费很多的时间。后面还得加上回归测试的时间等等。这些成本的消耗,老板是否买单呢?
    重构是一个比较重大的决定,牵扯到项目的方方面面。不是可以由技术人员单方面去决定是否能重构的。当然,如果真的很闲,重构不失为一个充实工作,提升技术的好方式。

如何实施重构

决定重构后,如何实施?
从我个人的实践经验来看,代码重构需要提前规划和布局,才能优雅的进行。项目技术负责人需要尽量提前预知在未来什么节点下,当前的架构无法满足业务,并提前协调资源开始规划重构。整个过程可以有以下两种模式:

  1. 整体重构,一气呵成。将团队分成AB组,A组继续在当前分支开发,满足业务发版本的需求。B组负责在新分支上在新架构的基础上开发并迁移旧功能。当B组的功能完成并测试通过过,AB组合并,在新架构上开发。
  2. 局部重构,小步前进。在项目的新功能采用新架构,同时兼容旧功能。在产品迭代的过程中按功能模块逐步迁移旧功能。

上面的方法不一定适用在所有的项目组,具体情况还得具体分析。

特别说明 -------- 新版本请访问网站www.bluefishes.net. 考虑到稳定性,新版本不支持Visual Studio.NET 2002. 产品名称 -------- SharpRefactor(C#代码重构工具) 产品简述 -------- 本工具用于代码重构和代码自动生成。现阶段主要用于C#代码重构。 所谓重构也就是“保持软件的外在功能不变,重新调整其内部结构”。 关于每种重构模式的含义,请参见http://www.refactoring.com/ 具体功能参见具体版本的特性列表。 对重构很感兴趣或是很关注使用效率的用户,希望[使用指南]一节对你有所助益。 版本 ---- 1.0.0(BETA). 发布日期 -------- 2003/6/13 作者 ---- C# Refactor Team. 制作 ---- Blue Workshop. 环境要求 -------- Visual Studio.Net 2003 Windows 2000 + SP2 + SMTP Service 特别提示 -------------- 本插件使用了异常处理和报告机制。 一般而言,环境、代码以及其他原因都会导致程序出错。因此,在您使用本插件的过程中,可能会弹出错误报告。一部分错误不会影响使用,另一部分会影响使用。 C# Refactor Team愿意随时提供技术支持,及时为你解除问题。 版本1.0.0特性 ------------- Rename Parameter Rename Local Variable Rename Field Rename Property Rename Class Rename NameSpace Safe Delete Parameter Safe Delete Local Variable Safe Delete Field Safe Delete Property Safe Delete Method Safe Delete Class Safe Delete NameSpace Extract Interface Undo/Redo Preview usage before refactor(重构前预览) Auto build after refactor(重构后自动生成) Options(工具选项) User feedback(用户反馈) 使用指南 -------- 所有功能暂不支持静态成员。 尽量使用鼠标右键菜单。 尽量使用快捷方式,比如:单击鼠标右键,弹出菜单后再连续按‘R’键和‘C’键就可以调用[Rename]菜单下的[Rename Class]命令。 在使用Rename系列命令时,需要先转到定义代码元素的地方。此时,可以先使用右键菜单中的[转到定义]命令。 在Option中可以设置首选项。 由于Visual Studio在生成较大的解决方案时有时会不成功,所以Auto build after refactor通常用于较小的解决方案。 Rename NameSpace与Move Class不同。Move Class的焦点在Class,即改变类所在的NameSpace。而Rename NameSpace的焦点在NameSpace,即改变指定NameSpace的名字,并更新该NameSpace的所有引用(Usages)。 错误报告以及建议功能需要网络连接和Windows自带的SMTP服务。因为发送速度很快,所以不会占用您宝贵的时间。 可以使用User feedback功能提出您睿智的建议、批评、任何意见。 技术支持 -------- Tiger.BlueWorkshop@163.net 下载 ---- www.youkuaiyun.com 版本 发布日期 ----------------------------- 1.0.0(Beta) 2003/6/13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值