.NET 代码重构学习笔记:为何要代码重构

发表于:2011-9-20 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:spring yang    来源:51Testing软件测试网采编

分享:

  5、过度耦合的信息链

  “计算机是这样一门科学,它相信可以通过添加一个中间层解决任何问题”,所以往往中间层会被过多地追加到程序中。如果你在代码中看到需要获取一个信息,需要一个类的方法调用另一个类的方法,层层挂接,就象输油管一样节节相连。这往往是因为衔接层太多造成的,需要查看就否有可移除的中间层,或是否可以提供更直接的调用方法。

  6、各立山头干革命

  如果你发现有两个类或两个方法虽然命名不同但却拥有相似或相同的功能,你会发现往往是因为开发团队协调不够造成的。笔者曾经写了一个颇好用的字符串处理类,但因为没有及时通告团队其他人员,后来发现项目中居然有三个字符串处理类。革命资源是珍贵的,我们不应各立山头干革命。

  7、不完美的设计

  在笔者刚完成的一个比对报警项目中,曾安排阿朱开发报警模块,即通过Socket向指定的短信平台、语音平台及客户端报警器插件发送报警报文信息,阿朱出色地完成了这项任务。后来用户又提出了实时比对的需求,即要求第三方系统以报文形式向比对报警系统发送请求,比对报警系统接收并响应这个请求。这又需要用到Socket报文通讯,由于原来的设计没有将报文通讯模块独立出来,所以无法复用阿朱开发的代码。后来我及时调整了这个设计,新增了一个报文收发模块,使系统所有的对外通讯都复用这个模块,系统的整体设计也显得更加合理。

  每个系统都或多或少存在不完美的设计,刚开始可能注意不到,到后来才会慢慢凸显出来,此时唯有勇于更改才是最好的出路。

  8、缺少必要的注释

  虽然许多软件工程的书籍常提醒程序员需要防止过多注释,但这个担心好象并没有什么必要。往往程序员更感兴趣的是功能实现而非代码注释,因为前者更能带来成就感,所以代码注释往往不是过多而是过少,过于简单。人的记忆曲线下降的坡度是陡得吓人的,当过了一段时间后再回头补注释时,很容易发生“提笔忘字,愈言且止”的情形。

  曾在网上看到过微软的代码注释,其详尽程度让人叹为观止,也从中体悟到了微软成功的一个经验。

  三、重构(Refactoring)的难题

  学习一种可以大幅提高生产力的新技术时,你总是难以察觉其不适用的场合。通常你在一个特定场景中学习它,这个场景往往是个项目。这种情况下你很难看出什么会造成这种新技术成效不彰或甚至形成危害。十年前,对象技术(object tech.)的情况也是如此。那时如果有人问我「何时不要使用对象」,我很难回答。并非我认为对象十全十美、没有局限性 — 我最反对这种盲目态度,而是尽管我知道它的好处,但确实不知道其局限性在哪儿。

  现在,重构的处境也是如此。我们知道重构的好处,我们知道重构可以给我们的工作带来垂手可得的改变。但是我们还没有获得足够的经验,我们还看不到它的局限性。

  这一小节比我希望的要短。暂且如此吧。随着更多人学会重构技巧,我们也将对??你应该尝试一下重构,获得它所提供的利益,但在此同时,你也应该时时监控其过程,注意寻找重构可能引入的问题。请让我们知道你所遭遇的问题。随着对重构的了解日益增多,我们将找出更多解决办法,并清楚知道哪些问题是真正难以解决的。

  1、数据库(Databases)

  在「非对象数据库」(nonobject databases)中,解决这个问题的办法之一就是:在对象模型(object model)和数据库模型(database model)之间插入一个分隔层(separate layer),这就可以隔离两个模型各自的变化。升级某一模型时无需同时升级另一模型,只需升级上述的分隔层即可。这样的分隔层会增加系统复杂度,但可以给你很大的灵活度。如果你同时拥有多个数据库,或如果数据库模型较为复杂使你难以控制,那么即使不进行重构,这分隔层也是很重要的。

  2、修改接口(Changing Interfaces)

  「保留旧接口」的办法通常可行,但很烦人。起码在一段时间里你必须建造(build)并维护一些额外的函数。它们会使接口变得复杂,使接口难以使用。还好我们有另一个选择:不要发布(publish)接口。当然我不是说要完全禁止,因为很明显你必得发布一些接口。如果你正在建造供外部使用的APIs,像Sun所做的那样,肯定你必得发布接口。我之所以说尽量不要发布,是因为我常常看到一些开发团队公开了太多接口。我曾经看到一支三人团队这么工作:每个人都向另外两人公开发布接口。这使他们不得不经常来回维护接口,而其实他们原本可以直接进入程序库,径行修改自己管理的那一部分,那会轻松许多。过度强调「代码拥有权」的团队常常会犯这种错误。发布接口很有用,但也有代价。所以除非真有必要,别发布接口。这可能意味需要改变你的代码拥有权观念,让每个人都可以修改别人的代码,以运应接口的改动。以搭档(成对)编程(Pair Programming)完成这一切通常是个好主意。

42/4<1234>
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号