摘要:什么是重構(gòu)字面上的理解重新組織結(jié)構(gòu)為什么要重構(gòu)原來的結(jié)構(gòu)是什么樣子的有什么問題函數(shù)邏輯結(jié)構(gòu)條件判斷循環(huán)操作包含關(guān)系集合關(guān)系非關(guān)系可擴展性差新的變化不能被靈活處理對象強耦合可復用性差重復代碼多性能消耗太多隨著技術(shù)發(fā)展新的好特性如何重構(gòu)知道問題
什么是重構(gòu)?
字面上的理解: 重新組織結(jié)構(gòu)
為什么要重構(gòu)?
原來的結(jié)構(gòu)是什么樣子的?有什么問題? 1. 函數(shù)邏輯結(jié)構(gòu)[條件判斷、循環(huán)操作]: 包含關(guān)系、集合關(guān)系、非關(guān)系... 2. 可擴展性差,新的變化不能被靈活處理 3. 對象強耦合 4. 可復用性差, 重復代碼多 5. 性能消耗太多 6. 隨著技術(shù)發(fā)展, 新的好特性
如何重構(gòu)?可擴展性差,新的變化不能被靈活處理 eg
知道問題是什么, 針對問題進行重構(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; } }
違反開放 - 封閉原則[對擴展開放, 對修改封閉]
策略模式: 把一系列算法進行封裝,使算法代碼和邏輯代碼相互獨立
函數(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; } } })();
可擴展性的表現(xiàn)形式
對原生對象、庫、框架的擴展
1. prototype 2. jquery的擴展性 三個API:$.extend()、$.fn和$.fn.extend() 3. vue擴展 添加全局方法或?qū)傩?添加全局資源: 過濾器、指令、過渡 通過全局mixin添加一些組件選項 添加vue實例方法 基于vue的擴展[ 在組件或插件 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 手動拼寫 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/95091.html
摘要:已經(jīng)實現(xiàn)并維護了核心基礎(chǔ)結(jié)構(gòu)計劃的最佳實踐徽章。年中國開源峰會提案征集現(xiàn)已開放在中國開源峰會上,與會者將共同合作及共享信息,了解最新和最有趣的開源技術(shù),包括容器云技術(shù)網(wǎng)絡微服務等并獲得如何在開源社區(qū)中導向和引領(lǐng)的信息。 從沙箱或孵化狀態(tài)畢業(yè),或者作為一個新項目加入作為一個畢業(yè)項目,項目必須符合孵化階段標準以及: 有來自至少兩個機構(gòu)的提交者。 已經(jīng)實現(xiàn)并維護了核心基礎(chǔ)結(jié)構(gòu)計劃(CII)...
摘要:原文閱讀工程結(jié)構(gòu)最佳實踐組件化按照功能劃分按照組件劃分層次化不要在中寫太多業(yè)務邏輯,專注層業(yè)務層要單獨抽出數(shù)據(jù)庫層單獨抽出化把常用組件做成包分離的和配置化環(huán)境感知根據(jù)不同環(huán)境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文閱讀: nodebestpractices 1 工程結(jié)構(gòu)最佳實踐 1.1 組件...
閱讀 3728·2023-04-26 01:43
閱讀 3112·2021-10-14 09:42
閱讀 5873·2021-09-30 09:59
閱讀 2245·2021-09-04 16:40
閱讀 1298·2019-08-30 15:52
閱讀 915·2019-08-29 17:09
閱讀 2258·2019-08-26 13:37
閱讀 3622·2019-08-26 10:20