一、重构的理解
重构在代码编写中是必不可少的一步,如果没有重构,我们的代码将会杂乱无章,到处是变量、赋值和判断,if、for嵌套混乱,逻辑思路不清晰,纠错困难,代码的可重用性和扩展性非常低。重构代码,在不改变原有功能的前提下,对内部的结构进行重新整理,对功能进行模块划分,将具体实现方法从代码中抽离出来,独立成为功能方法,实现可调用性。跟数据模型有关的数据的增删改查要独立成model,实现增删改查方法的抽离和封装。跟逻辑有关的判断处理要独立写到一个JS里面。controlle只向view提供指示性标志变量和数据源,只通过调用方法实现逻辑控制,不实现任何功能方法。
二、model定义类模型和方法
这个跟C#和java其实很类似。数据模型里使用到的相关数据都可以定义一个model js,实现实例化和其增删改查方法。比如我的数据模型使用到Activity,那我就定义了一个Activity模型,通过构造方法传值给Activity,并进行属性赋值,还定义了3个方法,对象方法(使用prototype,为对象添加属性、方法):add_saveItem(),只能用实例化后的对象进行调用,类方法:getActivities()、setActivities(),可以直接类调用,代码如下:
function Activity(activity_name){ this.name = activity_name; this.status=""; this.bmMessages=[]; this.bidlists=[]; } Activity.prototype.add_saveItem=function() { var activities=Activity.getActivities(); activities.unshift(this); Activity.setActivities(activities); } Activity.getActivities=function(){ return JSON.parse(localStorage.getItem("activities"))||[]; }; Activity.setActivities=function(activities){ localStorage.setItem('activities',JSON.stringify(activities)) ; };
对应的控制器JS里使用方法如下:
var activity = new Activity(activity_name); //实例化一个Activity对象activity
activity.add_saveItem(); //对象调用对象的方法
三、模块划分、方法抽离简化、逻辑实现
1、模块划分
模块划分就是根据具体实现的功能,将功能分几大块,在不同的JS文件中实现,各个模块之间互不关联,通过逻辑JS文件进行模块之间的关联、逻辑的判断、方法的调用。
2、方法抽离简化
在重构中一个函数只实现一个功能,代码要尽量简单易懂,易于纠错。在做party_bid重构时,使用最多的就是underscore.js里的_.find,_.filter ,_.findWhere,在我的Party_bid第四张卡里有具体介绍,这里我就不介绍了。就只举个代码例子:
for(var i=0;i<activities.length;i++){ if(activities[i].name==innerAct.name){ activities[i].status="status"; } }
上面是for循环嵌套if实现属性匹配赋值,下面使用underscore的_.findWhere进行属性查找赋值
_.findWhere(activities,{name:innerAct.name}).status="status";
有时还需要将方法抽成一个function,可以传包括$scope在内的很多参数。
Activity.setstartbutton=function($scope){ $scope.startButton = true ; $scope.start_stop = "结束"; };
3、逻辑实现
将跟数据模型和功能实现模块无关的逻辑判断方法写到逻辑JS中,方法的命名要简洁易懂,一般angularjs的方法使用小写,用“_”分隔。
相关推荐
数据格式 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”和描述中的信息“backup_1000821v1001400000.zip”暗示这是一个备份文件,可能包含了某个系统或应用在特定时间点的数据快照。通常,这样的文件用于防止数据丢失,便于恢复到...
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
在提供的文件中,`quadratic_bid_ninebus.m`和`case9_bid.m`可能是两个主要的MATLAB源代码文件,它们可能包含了潮流计算的实现以及特定的优化算法,如牛顿-拉弗森法或者快速分解法。 `quadratic_bid_ninebus.m`可能...
bid格式招投标文件阅读器,可以打开浏览、管理电子招标文件,如果打不开标书文件,请按下面步骤检查:1、请查看招标文件(.bid文件)是否下载完全,请用IE下载工具下载;2、查看IE浏览器版本,如果版本低于IE8,低于IE...
- 在 "选择对象" 对话框中,选定需要的表,例如 "cctv_bid_result_qin_99" 和 "cctv_enterprise"。 7. **导入对象** - 在 "Generate Relationships" 对话框中,点击 "Import" 按钮将所选对象导入框架。 8. **...
演示脚本:Demo_BID_PnP.m%========================================== ========================% 接触: Marina Ljubenovic-葡萄牙里斯本电信研究所- Mario AT Figueiredo-葡萄牙里斯本电信学院-%============...
hidden_bids = {bid.bidder: bid.amount for bid in self.bids} highest_bid = max(hidden_bids.values()) winner = max(hidden_bids.keys(), key=lambda x: hidden_bids[x]) return (winner, highest_bid) ```...