重构心得

重构入手:

 

1. 找到牵连最广模块。

2. 找到上述模块中需要重构的相关的子类。

3. 原来代码不删除,保证编译运行。

4. 陆续重构其他模块

再列出我觉得可以借鉴的重构方法。【摘自代码大全】

1.保存初始代码。用你的版本控制系统保存一个初始版本,或是把最初正确的文件复制到备份目录中去。

2.同一时间只做一项重构。除非是对付那些最为简单的重构,否则在同一时间只做一项重构,在做下一项重构之前,对代码重新编译并测试。

3.检查对代码的修改。程序员在对代码尝试第一次修改的时候,有超过50%的可能性出错。而处理一大部分代码而不是区区几行,那么他们的修改时正确的几率则会有所提高。

4.设置一个停车场。在着手新的重构时,或许又会发现第三个重构将会给程序带来很多好处。为了处理这些并不需要立即对付的修改工作,可以把你需要在未来某个时间进行而现在可以放一边的修改工作列出来。

5.增加测试用例。应增加新的单元测试来检验新引入的代码。如果重构使得一些测试已经过时,那么就删除这些用例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨模块中的分配内存问题

现在有dll模块A,dll模块B以及静态库C, C中有个全局Create()函数负责创建对象M,当第二次调用Create()的时候会增加引用计数,并返回原来创建的对象M。Relase()会减少引用计数。当引用计数为0时,销毁对象M。现在在模块A中创建的初始化对象M,模块…

CListControl的OnMouseMove和OnNcHitTest

实际案例如下: 将CListCtrl做成菜单样式。需要处理当鼠标移到ClistCtrl上的事件。 处理逻辑这样:当鼠标移动到CListCtrl区域时候,将CListCtrl上所有ITem置为非选中状态,然后调用HitTest得到行数再将所选行置为选中状态。当鼠标移…

关于函数指针续

前面有提到过关于函数指针调用C非静态成员&#xff0c;解决了在类内调用函数指针的问题。 class CCallFuctionList { public: CCallFuctionList(); virtual ~CCallFuctionList(void); typedef void (CCallFuctionList::*FUNCPTR)(); typedef std::multimap<unsi…

关于函数指针续二

前篇文章解决了关于函数指针的不同类成员函数传递的问题。不知道细心的朋友看见我上篇文章后&#xff0c;是否发现参数必须被限制为特定的参数。 原来改进的代码如下&#xff1a; class CCallFuctionList { public:CCallFuctionList(); virtual ~CCallFuctionL…

HGE2D引擎按键消息分析

我们自己先动手来模仿HGE其键盘特殊按键消息响应&#xff0c;其中所涉及到的数据操作含义稍后再介绍。 首先创建基于对话框CGetKeyBoardTestDlg的程序&#xff0c;创建一个STATIC控件ID为IDC_STATIC_CONTENT在对话框上面。添加成员 unsigned char kbstate[256]; 和int flag; 在…

HGE引擎适用于MFC的修改

打开hge181/src/core/system.cpp 找到System_Initiate()函数&#xff0c;可以看见里面有段代码是用于创建窗口。 // Register window classwinclass.style CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;winclass.lpfnWndProc WindowProc;winclass.cbClsExtra 0;wincl…

关于CString

昨天重构代码的时候&#xff0c;这样一段代码&#xff1a; CString str _T("bbbbbbbb");LVITEM item GetItem(str);LVITEM CLVIItemTestDlg::GetItem(CString text){LVITEM item;item.iItem 0;item.iSubItem 0;item.mask LVIF_TEXT;item.pszText text.GetBuffer…

HGE2D引擎按键消息分析(续)

继续上一章对其按键消息处理抽丝剥茧。看BuildEvent()函数里面 我们先来分析其这段代码 if(typeINPUT_KEYDOWN){if((flags & HGEINP_REPEAT) 0) keyz[key] | 1;ToAscii(key, scan, kbstate, (unsigned short *)&eptr->event.chr, 0);}if(typeINPUT_KEYUP){keyz[key…

动态链接MFC引发的血案

首先简单描述下程序运行的步骤&#xff0c; 我们要去加载两个DLL&#xff0c;先加载的称为A,后加载的称为B&#xff0c;加载A在里面做的事情是动态创建一个全局对象&#xff0c;加载B在里面做的事情是取得这个全局对象&#xff0c;然后干其他事情。 我们机子上运行的非常完美。…

规避软件架构风险之反模式

在QCON大会上&#xff0c;Michael Nygard&#xff0c;以及 李伟专家都提到了一个概念&#xff0c;容错能力。 衡量软件架构最佳的一个很重要的因素就是看软件的容错能力。没有容错能力的软件&#xff0c;哪怕你QA都非常优秀&#xff0c;但一发生故障就出现集联失效&#xff0c;…

使用DC

timer里面尽量避免使用DC&#xff0c;不然会非常慢

wxPython做界面的适用性

wxpython 优点&#xff1a; 1. 提高了程序的可维护性 2. 界面布局可由专业人员设计 3. 更好的支持GUI布局设计工具 4. 作为wxWidgets的规范&#xff0c;XRC资源可通用于C、Python等语言 5. PYTHON脚本语言上手很快。 6. 分离界面布局和程序逻辑 7. 跨平台 缺点&…

ODBG常用快捷键总结

CtrlN 输入表查看。一般在没加壳的程序中能够解析出来。实践过程中&#xff0c;可快速定位到一些常用API&#xff0c;然后将其作为突破口。 AltM 内存查看。能快速定位不同模块的区段&#xff0c;能够设置某个模块的访问断点。 Alt<- 看见高手操作&#xff0c;能直接恢…

wPython环境安装

http://laochake.javaeye.com/blog/438667 关于版本问题&#xff0c;还是用最新最稳定就行。

__declspec(naked)和__asm编写实践总结

__cdecl 和 __stdcall 压栈参数顺序是一致的&#xff0c;但平衡堆栈方式不一样。 __cdecl调用函数方式是调用者&#xff0c;即函数外部平衡堆栈&#xff0c;一般是在函数外部调用add esp, xxxx&#xff0c;函数内部只需要ret返回就行 __stdcall调用函数方式是被调用&#xff…

逆向调试雷电思路总结

1.首先根据内存变化&#xff0c;能迅速找到飞机的生命&#xff0c;炸弹&#xff0c;分数&#xff0c;能够基本确认飞机结构。 2.找飞机位置有点困难&#xff0c;但可以查找飞机结构属性周围的内存变化找到飞机变化的坐标&#xff0c;这里有个小技巧&#xff0c;可以将内存十六进…

共享内存实践总结

经过实验得之&#xff0c;共享内存只有在两个进程同时存在的情况下映射才会成功 。 当共享内存在一个进程映射的情况下&#xff0c;此进程一旦销毁&#xff0c;共享内存即刻销毁,当第二个进程创建共享内存&#xff0c;会有新的共享内存空间。 另外console进程&#xff0c;在mai…

调试总结

1.调试程序之前不要放过每个细节&#xff0c;包括资源配置文件的所有东西都必须过一道两道或者三道&#xff0c;在这里发现的线索往往能让你调试事半功倍。 2.解析收包发包是基础&#xff0c;往往能跟到比较有价值的线索。 3.找结构体指针地址&#xff0c;想通过内存搜索来找…

sizeof

对于new出来的array sizeof()得到的只是指针大小 对于直接赋值的array sizeof()得到的就是整个数组的大小 memcpy的时候特别注意

关于栈实践总结

今天发了个帖&#xff0c;问栈位于进程空间的哪个位置&#xff0c;居然很多人都不清楚。本人用OD看了下就一目了然 进程结构示意图&#xff1a; 主线程堆栈 --临时变量都在里面主线程pe --GetModuleHandle(NULL)通过API得到的进程首地址在这个位置&#xff…