party—bid已经做完了,现在回想起来重构的过程依然觉得特别纠结,因为本身的数据存储结构比较复杂,比较乱,所以重构起来也觉得特别痛苦。
存储结构是这样的:见附件
对其中内容的查找操作是通过id进行的,这个id的换算比较麻烦。
重构的过程是这样的:
(1)首先程序中用了大量的if和for循环的嵌套,为了减小圈复杂度,用underscore替换了一遍
(2)将重复的并多次用到的代码拿出来抽成独立的函数,以供调用(比如得到当前活动的id以及获得当前竞价的id)。
(3)抽出数据模型model,因为代码写的太乱并且职责划分错误很多,导致这个过程很难进行,所以先将职责错误改掉,(比如模态框隐藏与显示,之前是用ng-class关键字,在控制器里直接改模态框的class,重构之后用ngSwitch来控制模态框。)
(4)因为原程序是面向过程的,函数直接写下来行数比较多。参照的模板是面向对象的,因此查了面向对象的优点,并将原程序由面向过程改为了面向对象。
(5)直到上一步完成,才真正开始了重构,将model抽出,controller只负责业务逻辑,不参与功能实现。
(6)代码重构后,短信处理采用的责任链的形式,这样可以保证每个函数最多有一个if,代码看上去比较清晰易懂。
重构的过程虽然痛苦,但是确实学到了许多。也知道了以后的代码应该怎样写。下面是我的体会:
(1) 每当写一个新的应用,一定要先把数据结构组织好,不能照着需求一条一条的做,要把握整体的思路。
(2) 每个函数只做一件事,代码不能太长,一般不超过15行,函数内圈复杂度在容易理解的前提下降至最低,循环等用underscore代替。
(3)对MVC有了深刻的理解,model层实现所有与数据结构有关的增删改查等方法以及完成其他功能的功能函数,controller 不实现任何功能方法,只通过调用功能方法实现逻辑控制
(4)对面向过程有了一定的了解,相对于面向过程而言,面向对象结构清晰,容易维护,容易扩展,有继承、封装、多态的特性。
重构的优势与劣势:重构的代码结构比较清晰,易于维护。劣势是重构过程会出现不可预知的错误,改这些错误需要很多时间。
- 大小: 27.9 KB
分享到:
相关推荐
数据格式 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"可能是项目、服务...