@(重构)[组件化|拆分]javascript
代码重构是一个产品不断的功能迭代过程当中,不可避免的一项工做。所谓重构
,是在不改变程序的输入输出即保证现有功能的状况下,对内部实现进行优化和调整。 每一个开发人员从业生涯中,或多或少的作太重构工做。小到重写一个功能函数、业务组件,大到重构一个复杂功能模块或整站重构。html
重构是须要花费必定成本和精力的,尤为是一个有各类历史遗留问题(用的老旧框架或工具)、又糅杂了各类业务逻辑(有些功能逻辑连需求方都未必清楚)、且可读性及维护性都不好的重要功能模块,好比考拉的下单页,不动,每次功能迭代的时候都有想撞墙的心,大动,又是不小的工做量,且有必定的风险。固然长痛不如短痛,长远来看,重构势在必行。前端
重构工做实际上是随时均可进行的。当你以为代码可读性变差、重用性及可维护性下降时,都应该有意识的去作重构。在大部分的项目中,如下将是重构的合理时间点:java
固然在需求紧急的时候,是不适合作重构的。后端
以考拉下单页重构为例。bash
但凡重构,必需要对已有业务逻辑有较充分的了解,评估重构的影响面及可能的风险, 列出基本功能点(也可做为QA的测试回归点),保证重构后不要有功能遗漏,不改变现有功能。框架
如何了解已有业务逻辑?异步
在对业务逻辑有充分了解以后,能够进行功能拆分,把可重用的、功能独立的业务逻辑做为组件或公用模板提取,同时须要考虑组件之间的相互影响。拆分以后,能够多人并行开发,约定好外部调用组件的接口便可。
如下是下单页的功能模块拆分:函数
根据同步字段orderType,来肯定是普通商品订单仍是帐号充值订单,并初始化对应的组件;根据同步信息,异步获取下单信息(含商品信息及结算信息);若是是普通商品订单,服务端会根据用户所选地址进行拆单,返回拆单后的商品和结算信息。按功能拆分后,组件及组件的嵌套关系以下:工具
下单页目录结构:
javascript
|——components
| |——address/address.js //地址控件
| |——checkcode/checkcode.js //验证码控件
|——page/order
| |——order_confirm.js //入口脚本
| |——components
| | |——confirmGoods.js+html //确认商品信息
| | |——settlement.js+html //结算信息
| | |——exchangeCoupon.js+html //兑换优惠券
| | |——rechargeInfo.js+html //帐号充值
| | |——invoiceInfo.js+html //发票信息
| | |——invoice.js+html //设置发票
| | |——bean.html //考拉豆抵扣
| | |——feeList.html //运费税费列表
| | |——gift.html //赠品信息
| | |——useCoupon.js+html //使用优惠券
| | |——submitCB.js //提交回调
| |——widget
| | |——popCoupon.js //弹窗领券复制代码
重构历来不是一次性行为,是咱们须要不断进行的工做。多人维护以及不断的功能迭代以后,代码多多少少都会有优化的空间,因此在你看到不合理或任何值得重构的地方时,行动起来吧,去优化,不要等到重构的成本更大时再进行,由于那会更痛,不要问我怎么知道。