摘要:什么是重構(gòu)字面上的理解重新組織結(jié)構(gòu)為什么要重構(gòu)原來(lái)的結(jié)構(gòu)是什么樣子的有什么問(wèn)題函數(shù)邏輯結(jié)構(gòu)條件判斷循環(huán)操作包含關(guān)系集合關(guān)系非關(guān)系可擴(kuò)展性差新的變化不能被靈活處理對(duì)象強(qiáng)耦合可復(fù)用性差重復(fù)代碼多性能消耗太多隨著技術(shù)發(fā)展新的好特性如何重構(gòu)知道問(wèn)題
什么是重構(gòu)?
字面上的理解: 重新組織結(jié)構(gòu)
為什么要重構(gòu)?
原來(lái)的結(jié)構(gòu)是什么樣子的?有什么問(wèn)題? 1. 函數(shù)邏輯結(jié)構(gòu)[條件判斷、循環(huán)操作]: 包含關(guān)系、集合關(guān)系、非關(guān)系... 2. 可擴(kuò)展性差,新的變化不能被靈活處理 3. 對(duì)象強(qiáng)耦合 4. 可復(fù)用性差, 重復(fù)代碼多 5. 性能消耗太多 6. 隨著技術(shù)發(fā)展, 新的好特性
如何重構(gòu)?可擴(kuò)展性差,新的變化不能被靈活處理 eg
知道問(wèn)題是什么, 針對(duì)問(wèn)題進(jìn)行重構(gòu)
let checkType = function(str, type) { switch (type) { case "email": return /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/.test(str); case "mobile": return /^1[3|4|5|7|8][0-9]{9}$/.test(str); case "tel": return /^(0d{2,3}-d{7,8})(-d{1,4})?$/.test(str); case "number": return /^[0-9]$/.test(str); case "english": return /^[a-zA-Z]+$/.test(str); case "text": return /^w+$/.test(str); case "chinese": return /^[u4E00-u9FA5]+$/.test(str); case "lower": return /^[a-z]+$/.test(str); case "upper": return /^[A-Z]+$/.test(str); default: return true; } }
違反開放 - 封閉原則[對(duì)擴(kuò)展開放, 對(duì)修改封閉]
策略模式: 把一系列算法進(jìn)行封裝,使算法代碼和邏輯代碼相互獨(dú)立
函數(shù)單一原則
let checkType = (function() { let rules = { email (str) { return //.test(str); } ... }; return { check (str, type) { return rules[type]? rules[type]() : false; } addRule (type, fn) { rules[type] = fn; } } })();
可擴(kuò)展性的表現(xiàn)形式
對(duì)原生對(duì)象、庫(kù)、框架的擴(kuò)展
1. prototype 2. jquery的擴(kuò)展性 三個(gè)API:$.extend()、$.fn和$.fn.extend() 3. vue擴(kuò)展 添加全局方法或?qū)傩?添加全局資源: 過(guò)濾器、指令、過(guò)渡 通過(guò)全局mixin添加一些組件選項(xiàng) 添加vue實(shí)例方法 基于vue的擴(kuò)展[ 在組件或插件 install]
日常開發(fā)中
函數(shù)寫法優(yōu)化
function formatStr (str) { return str.replace(/(d{4})(d{2})(d{2})(d{2})(d{2})(d{2})/, "$1-$2-$3 $4:$5:$6"); } function formatStr(str, type) { let i = 0; let _type = type || "xxxx-xx-xx xx:xx:xx"; return _type.replace(/x/g, () => str[i++]); }
function createPhoneNumber(numbers){ var format = "(xxx) xxx-xxxx"; let i = 0; return format.replace(/x/g, () => numbers[i++]); }
who like it?
// 模版字符串 or 手動(dòng)拼寫 function likes(names) { let template = [ "no one likes this", "{name} likes this", "{name} and {name} likes this", "{name}, {name} and {name} likes this", "{name}, {name} and {n} others likes this" ]; let idx = Math.min(names.length, 4); template[idx].replace(/{name}|{n}/g, (value) => { return value === "{name}" ? names[idx++]: names.length; }); }
shortest word?
// apply | call function findShortest (s) { return Math.min.apply(null, s.split(" ").map((val) => val.length)); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95091.html
摘要:已經(jīng)實(shí)現(xiàn)并維護(hù)了核心基礎(chǔ)結(jié)構(gòu)計(jì)劃的最佳實(shí)踐徽章。年中國(guó)開源峰會(huì)提案征集現(xiàn)已開放在中國(guó)開源峰會(huì)上,與會(huì)者將共同合作及共享信息,了解最新和最有趣的開源技術(shù),包括容器云技術(shù)網(wǎng)絡(luò)微服務(wù)等并獲得如何在開源社區(qū)中導(dǎo)向和引領(lǐng)的信息。 從沙箱或孵化狀態(tài)畢業(yè),或者作為一個(gè)新項(xiàng)目加入作為一個(gè)畢業(yè)項(xiàng)目,項(xiàng)目必須符合孵化階段標(biāo)準(zhǔn)以及: 有來(lái)自至少兩個(gè)機(jī)構(gòu)的提交者。 已經(jīng)實(shí)現(xiàn)并維護(hù)了核心基礎(chǔ)結(jié)構(gòu)計(jì)劃(CII)...
摘要:原文閱讀工程結(jié)構(gòu)最佳實(shí)踐組件化按照功能劃分按照組件劃分層次化不要在中寫太多業(yè)務(wù)邏輯,專注層業(yè)務(wù)層要單獨(dú)抽出數(shù)據(jù)庫(kù)層單獨(dú)抽出化把常用組件做成包分離的和配置化環(huán)境感知根據(jù)不同環(huán)境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文閱讀: nodebestpractices 1 工程結(jié)構(gòu)最佳實(shí)踐 1.1 組件...
閱讀 3616·2023-04-26 01:43
閱讀 3005·2021-10-14 09:42
閱讀 5558·2021-09-30 09:59
閱讀 2201·2021-09-04 16:40
閱讀 1235·2019-08-30 15:52
閱讀 860·2019-08-29 17:09
閱讀 2030·2019-08-26 13:37
閱讀 3457·2019-08-26 10:20