国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

最佳實踐

iamyoung001 / 3418人閱讀

摘要:什么是重構字面上的理解重新組織結構為什么要重構原來的結構是什么樣子的有什么問題函數邏輯結構條件判斷循環操作包含關系集合關系非關系可擴展性差新的變化不能被靈活處理對象強耦合可復用性差重復代碼多性能消耗太多隨著技術發展新的好特性如何重構知道問題

什么是重構?
字面上的理解: 重新組織結構
為什么要重構?
原來的結構是什么樣子的?有什么問題?
1. 函數邏輯結構[條件判斷、循環操作]: 包含關系、集合關系、非關系...
2. 可擴展性差,新的變化不能被靈活處理
3. 對象強耦合
4. 可復用性差, 重復代碼多
5. 性能消耗太多
6. 隨著技術發展, 新的好特性
如何重構?
知道問題是什么, 針對問題進行重構
可擴展性差,新的變化不能被靈活處理 eg
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;
    }
}

違反開放 - 封閉原則[對擴展開放, 對修改封閉]
策略模式: 把一系列算法進行封裝,使算法代碼和邏輯代碼相互獨立
函數單一原則

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;
        }
    }
})();

可擴展性的表現形式

對原生對象、庫、框架的擴展

1. prototype

2. jquery的擴展性
   三個API:$.extend()、$.fn和$.fn.extend()

3. vue擴展
添加全局方法或屬性
添加全局資源: 過濾器、指令、過渡
通過全局mixin添加一些組件選項
添加vue實例方法
基于vue的擴展[ 在組件或插件 install]

日常開發中

函數寫法優化

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));
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95091.html

相關文章

  • 簡介:CII最佳實踐徽章 - CNCF畢業標準要求之一

    摘要:已經實現并維護了核心基礎結構計劃的最佳實踐徽章。年中國開源峰會提案征集現已開放在中國開源峰會上,與會者將共同合作及共享信息,了解最新和最有趣的開源技術,包括容器云技術網絡微服務等并獲得如何在開源社區中導向和引領的信息。 從沙箱或孵化狀態畢業,或者作為一個新項目加入作為一個畢業項目,項目必須符合孵化階段標準以及: 有來自至少兩個機構的提交者。 已經實現并維護了核心基礎結構計劃(CII)...

    jzman 評論0 收藏0
  • 筆記: node最佳實踐1 - 項目工程最佳實踐

    摘要:原文閱讀工程結構最佳實踐組件化按照功能劃分按照組件劃分層次化不要在中寫太多業務邏輯,專注層業務層要單獨抽出數據庫層單獨抽出化把常用組件做成包分離的和配置化環境感知根據不同環境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文閱讀: nodebestpractices 1 工程結構最佳實踐 1.1 組件...

    APICloud 評論0 收藏0

發表評論

0條評論

iamyoung001

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<