前言:
重构是一个在不改变代码的外部行为的情况下,修改源代码的过程。不修改错误,也不新增功能,它单单是提高代码可读性,改变代码内部结构和设计(又包括分析业务、功能逻辑,划分角色单位等等)的一个过程,已达到在将来代码更加容易维护的目的。
重构的内容:
1.命名:要做到见名知义.写代码我们要养成一个好习惯,让大家看到代码时知道我们想干什么.
2.对于复杂的函数:要抽成几个函数,要做到每个函数只干一件事.这样可以避免在一个地方用到了之前用过的代码,而这段代码却嵌在之前的函数中.降低了耦合度(不同模块之间互连程度)也减少了代码行数.
在开发的过程中,我们都遇到过这样一个问题,在另一个地方用到了之前用过的一段代码实现,但是这段代码却嵌在之前的函数之中,遇到这样的问题你怎么办呢?有些人是重新写一遍代码,也可能就直接把原来的那一段代码直接黏贴过来,其实,这两种方式又有什么区别呢?他们的结果都是真真正正的在我们的代码中又多了一段晦涩难懂的重复代码。我们在重构的过程中就要把这段重复代码拎出来成为单独的模块,每个函数只干一件事,降低了耦合度也减少了代码行数。
3.对于MVC:model实现所有与数据结构相关的增查方法;view有自己的逻辑,controller只向view提供指示性标志变量和数据源,不对任何数据操作的方法做实现,只通过调用有model的属性或方法实现逻辑控制。也就是说controller处理了所有的业务逻辑,model承担了所有业务逻辑所有的数据的增删改查,view实现了所有的系统和用户之间的业务交互。
4.繁琐的判断和循环:应该少用if...else(至少应该少用else)或者for,使我们的逻辑更简单,代码的维护性更强.
下面列出了重构的具体要求,但是这些要求比较机械化,我们不能为了满足这些要求去重构,而是重构后要满足这些要求.
重构遇到的问题和解决:
1.对于较多的if...else...可以用if...return来代替
2.对于if和for的相互嵌套,可以用underscore替代一部分
3.能在haml控制的东西就在haml页面控制,如控制活动开始或结束按钮的名字,我们可以用ng-switch而不是在controller中调用活动的状态
4._.chain(obj)
返回一个封装的对象. 在封装的对象上调用方法会返回封装的对象本身, 直道 value 方法调用为止.
_.chain(BidMessages.get_bid_messages())
.filter(function(bid_message){
return bid_message.activity_name == localStorage.enter_into_it && bid_message.bid_id == localStorage.enter_into_bid
})
.groupBy(function(bid_message){
return parseInt(bid_message.price)
})
.map(function(value,key){
return {"price":key,"count":value.length}
})
.find(function(bid_message){
return bid_message.count == 1
})
.value();
5.用hash代替if:http://stu-zhaoli.iteye.com/blog/2039042
重构要求
1.小步伐修改程序,每一小步的修改后,程序能正常运行,commit。
2.JS OOP (JavaScript权威指南,p 156~166)
3.重构后,每个函数只做一件事,函数不超过十五行
4.函数名符合命名规范,见名知意
5.函数内圈复杂度在容易理解的前提下降至最低。
6.将数据模型抽成model,model实现所有与数据结构相关的增查方法
7.view有自己的逻辑,controller只向view提供指示性标志变量和数据源。
8.controller 不实现任何功能方法,只通过调用功能方法实现逻辑控制。
9.对象、数组等用underscore 取代各种循环。
10.要学会用chain
11.对短信处理逻辑进行封装,设计。 OO或者DSL
因为每个人的代码风格和数据结构不同,以上规范只是作为重构以后对代码质量的要求,不要被序号牵制自己的重构顺序。
参考文献:
1._.chain:http://www.css88.com/doc/underscore/#chain
分享到:
相关推荐
数据格式 uid_score_bid 如 dingdanglbh,4.0 ,25862578 Luna-cat,5.0 ,25862578 aiyung,5.0 ,25862578
标题中的"case9_bid.rar_PSO_PSO power_PSO 潮流_case9_pso power flow"揭示了这个压缩包文件包含的是一个关于电力系统潮流计算的案例,使用了粒子群优化(PSO, Particle Swarm Optimization)算法。PSO是一种基于...
标题中的"crc16-CCITT.rar_ccctt.5com_ccctt3bid_ccctt9._bid_crc16 ccitt ver"可能是指一个包含CRC-16 CCITT实现相关资料的压缩文件,其中包含了各种文档、源代码或测试向量。"ccctt.5com"、"ccctt3bid"、"ccctt9._...
该招标项目前端设计源码采用JavaScript编写,包含280个文件,涵盖177个JavaScript文件、26个CSS文件、24个HTML文件、22个Java文件以及少量地图、JSON、图像、XML等文件。整个项目旨在打造一个功能完善、界面美观的...
欧美1分钟历史数据,2003年5月到2019年2月,MT4EA回测好用。
"mc_bid"通常在IT行业中指的是“Multi-Channel Bid”,这是一种广告投放策略,特别是在数字营销领域,用于优化广告在多个渠道上的出价。这个概念主要应用于程序化广告(Programmatic Advertising),通过自动化的...
标题 "Repaso_Clases_Objetos_call_aplly_bid_22_02_2021" 暗示这是一个关于回顾类与对象、`call` 和 `apply` 方法以及可能涉及到的 JavaScript 语言特性的教程或复习资料。描述部分的信息较为简单,与标题相同,...
去噪代码 matlab
总结起来,这个“backup_1000821v1001400000.zip”压缩包可能包含了一个陌陌应用或系统的备份数据,其中`verify.json`和`config.json`文件提供了备份验证和应用配置信息,而`verify.sign`和`verify.signature`则保证...
bid0-lid0-steam游戏管家_steambdth01_1.0.0.1487@1prw2r@gog.exe
bid0-lid64-steam.game_steamzc9_2.0.0.2702.exe.file
出价统计信息和详细信息 作为签约过程一部分而...bids.details数组用于提供一个或多个Bid对象,每个对象代表收到的唯一出价。 bids.statistics数组用于表示有关投标和投标者数量的关键统计信息。 数组中的每个条目都
标题“bid_shift_reg.rar_plus”暗示我们关注的焦点是一个与数字电路设计相关的项目,特别是使用VHDL(Very High-Speed Integrated Circuit Hardware Description Language)编写的双向移位寄存器。在电子工程领域,...
【标题】"Bid Documents - Toyota Hilux Fx_pdf_" 暗示了这是一个与丰田Hilux FX车型相关的招标文件,格式为PDF。在IT领域,PDF(Portable Document Format)是一种广泛使用的文档格式,用于保存内容,确保在不同...
bid0-lid64-steam.game_steamzc_2.0.0.2242.exe
bid格式招投标文件阅读器,可以打开浏览、管理电子招标文件,如果打不开标书文件,请按下面步骤检查:1、请查看招标文件(.bid文件)是否下载完全,请用IE下载工具下载;2、查看IE浏览器版本,如果版本低于IE8,低于IE...
在提供的文件中,`quadratic_bid_ninebus.m`和`case9_bid.m`可能是两个主要的MATLAB源代码文件,它们可能包含了潮流计算的实现以及特定的优化算法,如牛顿-拉弗森法或者快速分解法。 `quadratic_bid_ninebus.m`可能...
- 在 "选择对象" 对话框中,选定需要的表,例如 "cctv_bid_result_qin_99" 和 "cctv_enterprise"。 7. **导入对象** - 在 "Generate Relationships" 对话框中,点击 "Import" 按钮将所选对象导入框架。 8. **...
演示脚本:Demo_BID_PnP.m%========================================== ========================% 接触: Marina Ljubenovic-葡萄牙里斯本电信研究所- Mario AT Figueiredo-葡萄牙里斯本电信学院-%============...
标题中的“Bid Documents - Service Pick-up_OntheUp_tantakpins_”暗示这是一份关于服务接洽的投标文档,其中可能包含了与"OntheUp"和"tantakpins"两个关键词相关的服务流程或项目信息。"OntheUp"可能是项目、服务...