软件系统的运行时间越久,代码就愈发弥漫着一股腐烂的气息。
在实际的工作经历中,很少能遇到从零开发重新开发一个新系统的任务,很多时候都是在维护了一个运行多年的老系统,不是修改那些甚至已经不知所谓的老代码,就是在已有的软件框架基础上进行新功能的添加开发,但是那个框架为了保证系统稳定性,也是再修修补补中愈发的臃肿,增加一个功能的过程那是颇为曲折。
良好的设计是优雅代码实现的前提。
没有计划就盲目的开发,得到的肯定是有坏味道的代码(除非是天才)。即使是xp极限编程,提倡立即动手写代码实现功能,也并不是说完全没有实现规划设计就开始写代码。
无论怎样,事先花一点时间做设计,完全是值得的,对你未来的代码,以后的修改完善必定是有好处的。
但是不管怎么样的细心分析,谨慎设计,得到的设计结果也不会是十全十美,无懈可击的。跟不用提在根据设计实现过程中,还会不断的失真放大,偏离了设计的原方向了。最后在项目逐渐开发深入的过程中,设计中的不足,考虑的不周就会不断被发现,而且实现的代码也会逐渐凸显问题,需要你着手去处理。
这个时候怎么办?设计错误了,决不能继续这样将错就错下去。计算机是很执拗的,1、0泾渭分明,沿着错误的道路一路走到黑肯定是不行的。当方向错误的时候,不是仅仅调整步伐就可以挽救了了的。
必须修改设计,然后再根据重新设计的结果对代码动手了。这点和需求功能的补充完善不一样的,必须立即进行,不然最后烂代码的泥沼必然会将项目带入万劫不复的地步。
即使是设计良好的代码,在未来软件长期运行维护过程中,多人加入了代码的维护工作,每个人的水平参差不齐,有高有低,自然编写的代码的质量也有好有坏,代码结构的流失是累积性的,代码就越来越烂了,这个时候,也得想办法如何改善代码,让它回到应有的轨道上,现在也许修修补补的还能将就维持,但总有一天,它烂到无法再下手的状况后,维护的人员就会崩溃了。
下面就看对代码怎么动手了。
第一反应肯定就是当下流行的代码重构了。这肯定是第一选择。在现有代码的基础上,进行代码的小规模改动,保证软件能够正常的按照原需求设定的方式运行,实现新的正确的设计结果,这是最好的选择了。
就像前面说的,改进软件的设计,代码如何与改进的设计相对应?重构。并且甚至很多情况下,设计的改进想法从何而来?都是来自具体的代码实现修改过程。没有重构,程序的设计会逐渐变质。当人们只为短期目的,或是在完全理解整体设计之前,就贸然修改代码,程序将逐渐失去自己的本来面目,软件开发人员就愈来愈难以通过阅读源码来理解软件的设计,从而更加难以入手修改源代码。
重构就像是在整理代码,随着对代码的理解的深入,对代码进行重构,改善代码的结构和实现,也会最终帮助你更好的修改代码,维护软件。所以,重构,最后都会促进改进软件的设计。
重构改进了软件结构和实现,我们常说,源代码不仅要正确,还得有良好的可读性,毕竟更多的时候,它是让程序员来阅读的。良好结构实现的代码,更容易去阅读理解它,也就意味着改动更容易。
说了这么多重构的好处,说起来重构虽然不是包治百病的万灵丹,但却是一剂良药,可以帮助始终良好的控制代码的质量。
提到了“始终”,就意味着要经常性的重构,而不是专门在开发工作中,安排重构任务。很有可能让你专门去对代码重构的时候,你已经没有了当初要重构代码的冲动了。
在你添加功能或者修补代码的时候,如果发现代码已经难以下手,或者代码的结构混乱到无法去阅读理解了,在你就要发狂之前,这就是代码重构最好的时机了。这股冲动会帮助你一鼓作气的去完成代码的重构,毫不迟疑。
其实重构虽然看起来要专门去阅读理解代码,然后重新编写代码(不管代码编写工作量是大是小)来实现,是需要花时间的。但是最终得到的结果是,你花掉的时间是值得的,你得到的是清晰易读的代码,你以后的维护修改工作要轻松的,节省下更多的时间。
这里肯定不能详细的去说如何进行代码重构,这方面的资料现在很多很详细(我正在读《重构改善既有代码的设计》这本书,有时间把重构的内容也写写)。而且也不必把重构看的那么神秘。很有可能你已经在工作中在进行代码的重构了,只是你没有认识到罢了。
【 就像是我当时做一个老系统的维护一样。那个时候最主要的工作就是进行系统报表的添加和修改。也许系统最开始报表不多,都是单独一张报表添加一个类,去实现该报表功能。现在的报表越来越多,而且代码的实现和结构都差不多。每天重复这样的工作肯定很无趣。于是就专门花了时间,将我主要维护的那一类报表仔细分析了下,把功能实现相雷同的代码整理出来,专门实现了一个报表框架功能类,以后只要在该类基础上进行具体报表业务功能的添加,就能完成报表的功能实现了。
虽然当时看起来耽误了工作任务进度,但最终的结果是我最后还是提前完成了工作任务,并且还是在很轻松的进度下完成的,以后的工作也变得分外轻松,从一天多的工作量,变成了只需要两到三个小时就ok了。】
没错,消除重复的代码,这就是重构,改进设计的一个重要的方向。代码量的减少,其实并不会使系统运行更快,但是代码量的减少将使未来可能的程序修改动作容易很多。
代码越简单,越不会出错,这绝对不会错的。
但是并不是任何时候都能用代码重构来应对设计的改变的。
有的时候,在不得已的情况下,重写比起重构来,是更好的方法。
重写是需要花更多的精力和时间的,但是有的时候,代码的实现与设计的新的目标已经差距太大了,或者说系统的现有代码已经烂到一定程度了,实在是无从下手,比起分析这些代码,然后进行重构,根据新的设计想法,重新实现真的是个更好的办法,花的时间精力反而少。
或者现有的代码根本不能正常工作,或者不是设计实现上的偏离,而是完全偏离的系统功能需求定义的方向,那就放弃它吧,它已经是满是错误的代码,根本无法稳定工作。
不过这只是个别的极端情况,我也在工作中遇到仅有的几次,想想干脆把那些已经不知所谓的代码一口气统统删掉,长长的出一口气,忘记那些烂代码带来的坏味道,然后精神抖擞的重新实现的感觉,真是痛快!
当然,如果你总是选择这痛快的感觉的话,很有可能会乐极生悲的。所以,如果没有那个必要的话,还是老老实实的对代码重构吧。
相关推荐
通过对"消灭星星"源代码的学习,开发者不仅可以了解游戏开发的基本流程,还能提升在实际项目中解决问题的能力,为自己的游戏开发之路打下坚实基础。同时,这也是一个很好的实践平台,可以让初学者将理论知识转化为...
unity消除类精品手游:《消灭泡泡》完整代码 Unity精品小游戏源码 , Unity完整项目源码 是Unitypackage包 , 新建空项目直接导入到项目里面就可以运行了,无需其他操作。 适合二次开发和学习使用,都是经典游戏,需要...
在《消灭小星星》这个游戏项目中,开发者可能利用了VC++的MFC(Microsoft Foundation Classes)或者WinAPI来处理窗口和事件管理。 游戏开发的关键在于游戏循环,这是所有游戏的核心部分。在源代码中,可能会有一个...
《消灭星星》是一款广受欢迎的休闲游戏,其源代码对于学习C#编程和游戏开发的初学者来说,具有很高的参考价值。在这个压缩包中,包含了游戏的源代码、相关文档和截图,为深入理解游戏逻辑提供了直观的资料。 1. C#...
【标题】"自己开发的消灭星星android-java源代码"揭示了这个项目是一个基于Android平台,用Java编程语言实现的移动游戏应用。"消灭星星"是一款流行的游戏,通常涉及到消除匹配的彩色方块,以获得积分并过关。在这个...
7. **游戏逻辑**:在《消灭星星》中,游戏逻辑可能包含消除规则、分数计算、关卡设计等方面,这部分代码展示了如何在Cocos2d-x中实现复杂的游戏逻辑。 8. **物理引擎**:尽管《消灭星星》可能没有使用物理引擎,但...
19--[消灭蚊子].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码19--[消灭蚊子].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码19--[消灭蚊子].zip源码scratch2.0 3.0编程项目源文件源码案例素材源...
4.3 小将消灭寄生物作业.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码4.3 小将消灭寄生物作业.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码4.3 小将消灭寄生物作业.zipscratch2.0 3.0...
通过分析和学习“消灭星星游戏源码”,我们可以提升自己的编程技能,了解游戏开发的全貌,为自己的项目积累宝贵经验。同时,开源共享的精神也让我们有机会接触到更多的优秀实践,促进个人和社区的成长。希望大家在...
Qt 4.7的工程 和 android 手机 上消灭星星原理一样。QT 代码简短 易懂。
【标题】"js消灭QQ表情网页小游戏代码"是一款基于JavaScript实现的互动娱乐项目,它将用户的鼠标操作与游戏逻辑相结合,挑战玩家的反应速度和精确性。在这个游戏中,玩家需要在QQ表情随机落下的过程中迅速点击,以...
【描述】中提到的"消灭蚊子"是一个具体的编程项目,孩子们将通过编写代码来创建一个游戏,目标是控制角色消除屏幕上的蚊子。这种类型的项目不仅锻炼了孩子们的逻辑思维和问题解决能力,还能够激发他们对编程的兴趣。...
在本项目中,我们主要关注的是"消灭星星小游戏C++版"的实现,这是一个基于Windows程序设计的基础游戏。"消灭星星"是一款广受欢迎的休闲益智游戏,通常包含消除相同颜色的方块以得分的游戏机制。在C++版本中,我们将...
在压缩包中的"默默击击消灭星星项目"可能是游戏的源代码文件,包括头文件(.h)和源文件(.cpp),以及可能的资源文件(如图片、音频)。通过分析这些文件,学习者可以深入理解游戏的实现细节,从而提升自己的编程...
在本资源中,我们拥有一个基于Python编程语言的"消灭病毒、消灭新冠"的小游戏源代码。这个小游戏采用Pygame库开发,Pygame是Python的一个模块,专为创建2D游戏和多媒体应用而设计。接下来,我们将深入探讨这个游戏...
"消灭星星"是一款深受玩家喜爱的经典休闲游戏,它的源代码分析将为学习cocos2dX游戏开发提供宝贵的实践案例。 首先,我们要了解cocos2dX的基本结构。cocos2dX是基于cocos2d-x的C++版本,它提供了面向对象的API,...
这个项目涵盖了游戏开发中的多个关键知识点,包括对象管理、游戏循环、碰撞检测和资源管理等。 1. **Cocos Creator**:Cocos Creator 是一个强大的2D游戏开发框架,支持跨平台开发,包括微信小游戏。它提供了一套...
在《消灭病毒》中,"消灭"的对象即病毒的运动轨迹、生成机制、消除效果等都由特定的代码实现。同时,玩家飞机的行为控制、射击逻辑也在此部分体现。 4. **运行逻辑图**: 逻辑图是游戏设计的重要组成部分,它清晰...
在“消灭星星”游戏中,玩家需要消除相同颜色的星星,因此这个网格图片和相关的处理代码将非常重要。 通过以上分析,我们可以了解到,c#开发的“消灭星星”游戏源码涵盖了图形处理、游戏逻辑、资源管理等多个方面,...