【讀書(shū)筆記】:《編寫(xiě)可維護(hù)的JavaScript》第09章 將配置數(shù)據(jù)從代碼中分離出來(lái)

第09章 將配置數(shù)據(jù)從代碼中分離出來(lái)

任何時(shí)候修改源代碼都會(huì)有引入 bug 的風(fēng)險(xiǎn),即使是只修改一些數(shù)據(jù)的值也會(huì)帶來(lái)一些不必要的風(fēng)險(xiǎn)。數(shù)據(jù)不應(yīng)該影響代碼的正常運(yùn)行。精心設(shè)計(jì)的應(yīng)用應(yīng)當(dāng)將關(guān)鍵數(shù)據(jù)從主要的源碼中抽離出來(lái),這樣我們修改數(shù)據(jù)時(shí)才更加放心。

9.1 什么是配置數(shù)據(jù)

// 不好的寫(xiě)法 將配置數(shù)據(jù)埋藏在代碼里
function validata(value) {
    if (!value) {
        alert("Invalid value");
        location.href = "/error/invalid.php";
    }
}

function toggleSelected(element) {
    if (hasClass(element, "selected")) {
        removeClass(element, "selected");
    } else {
        addClass(element, "selected");
    }
}

這段代碼中有三個(gè)配置數(shù)據(jù)片段。第一個(gè)是字符串“Invalid value”(非法的值),這個(gè)是用來(lái)給用戶(hù)提示的。因?yàn)檫@個(gè)字符串可以被用戶(hù)接觸到,所有它可能會(huì)被很頻繁地修改。第二個(gè)是 URL “/error/invalid.php”。在開(kāi)發(fā)過(guò)程中,當(dāng)架構(gòu)變更時(shí)則很可能頻繁修改URL。第三個(gè)是CSS的className “selected”。有三處都用到這個(gè)className,這也就意味著想要修改這個(gè)className則必須修改三處,很可能不小心丟掉了某處修改。

下面給出了一些配置數(shù)據(jù)的例子:

  • URL
  • 需要展現(xiàn)給用戶(hù)的字符串
  • 重復(fù)的值
  • 設(shè)置(比如每頁(yè)的配置項(xiàng))。
  • 任何可能發(fā)生變更的值。

我們時(shí)刻要記住,配置數(shù)據(jù)時(shí)可發(fā)生變更的,而且你不希望因?yàn)橛腥送蝗幌胄薷捻?yè)面中的展示信息,而導(dǎo)致你去修改JavaScript源碼。

9.2 抽離配置數(shù)據(jù)

將配置數(shù)據(jù)從代碼中抽離的第一步就是將配置數(shù)據(jù)拿到外部,即將數(shù)據(jù)從JavaScript代碼中拿掉:

// 好的寫(xiě)法 將配置數(shù)據(jù)抽離出來(lái)
var config = {
    MSG_INVALID_VALUE: "invalid value",
    URL_INVALID: "/error/invalid.php",
    CSS_SELECTED: "selected"
};

function validata(value) {
    if (!value) {
        alert(config.MSG_INVALID_VALUE);
        location.href = config.URL_INVALID;
    }
}

function toggleSelected(element) {
    if (hasClass(element, config.CSS_SELECTED)) {
        removeClass(element, config.CSS_SELECTED);
    } else {
        addClass(element, config.CSS_SELECTED);
    }
}

這段代碼中,我們將配置數(shù)據(jù)保存在了 config 對(duì)象中。config 對(duì)象的每個(gè)屬性都保存了一個(gè)數(shù)據(jù)片段,每個(gè)屬性名都有前綴,用以表明數(shù)據(jù)的類(lèi)型(MSG 表示展示給用戶(hù)的信息,URL 表示網(wǎng)絡(luò)地址,CSS 表示一個(gè)className)。當(dāng)然,命名約定是個(gè)人偏好。

將配置數(shù)據(jù)抽離出來(lái)意味著任何人都可以修改它們,而不會(huì)導(dǎo)致應(yīng)用邏輯出錯(cuò)。同樣,我們可以將整個(gè) config 對(duì)象放到單獨(dú)的文件中, 整個(gè)對(duì)配置數(shù)據(jù)的修改可以完全和使用這些數(shù)據(jù)的代碼隔離開(kāi)來(lái)。

9.3 保存配置數(shù)據(jù)

現(xiàn)在流行的做法就是將配置文件存放到j(luò)son格式的文件中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容