成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端業(yè)務代碼配置化

MSchumi / 1462人閱讀

摘要:如何寫好業(yè)務代碼在前端工作中有很多業(yè)務性代碼,如果書寫不規(guī)范,那么對后期的維護將是非常致命的。代碼配置化在使用編寫代碼的過程中,經(jīng)常用到這樣的情況,根據(jù)情況判斷是否展示對應的組件。

如何寫好業(yè)務代碼?
在前端工作中有很多業(yè)務性代碼,如果書寫不規(guī)范,那么對后期的維護將是非常致命的。

判斷配置化 業(yè)務場景

后端數(shù)據(jù)庫中經(jīng)常會一個字段具備幾個不同的狀態(tài),比如:

status: 2
// 各個字段對應的含義
0: 出生
1: 兒童
2: 少年
3: 中年
4: 老年

這樣不同的數(shù)字代表的含義,需要在前端展示。

需要根據(jù)不同的狀態(tài),前端去做不同的處理

方法一(switch)(bad)

下面這段代碼就是常見的無限if/else或者switch場景

// 業(yè)務代碼
switch (status) {
    case 0: 
        // do something
        return "出生";
    case 1:
        // do something
        return "兒童";
    ... ...
    default:
        return "";
}

這樣做是不好的,因為如果后端再加了一個字段,比如

5: 已死亡

那么前端需要重新修改switch函數(shù),這樣需要去修改對應的業(yè)務函數(shù),無疑破壞了業(yè)務代碼的完整性。

方法二(寫成配置文件)(better)
// cfg.js
export const cfg = new Map([
    [0, 出生],
    [1, 兒童],
    [2, 少年],
    ... ... 
]);

// 業(yè)務代碼
cfg.get(status)

但是這樣僅僅是顯示相關(guān)的狀態(tài),如果涉及到狀態(tài)的判斷,那這樣的處理方式就有些問題了,比如需要根據(jù)具體的狀態(tài)去做對應的判斷

switch (status) {
    case 0:
        // do something
        return ;
    ... ...

}

像上面的情況,又變成了第一種情況,顯然這種配置化的方式并不能滿足。如果將對應的操作,與配置分割,則代碼更加不易維護。

方法三(升級配置文件,處理代碼集中)(better)

將狀態(tài)處理集中起來,如果能將狀態(tài)展示和對應的狀態(tài)封裝起來,那么就會讓后期代碼維護顯得十分集中。

// cfg.js
const status = new Map([
    [0, 出生],
    [1, 兒童],
    [2, 少年],
    ... ... 
]);
const checkIsBirth = (status, callback) => {
    if(status === 0) {
        callback && callback()
    }
}
export default {
    status,
    checkIsBirth
}
// 在具體使用中
import Person from "./cfg.js"
const a = 1;
Person.status.get(a);
Person.checkIsBirth(a, () => {
    console.log("Person is in Birth state");
})

這樣處理,如果以后status發(fā)生變化,只需要修改checkIsBirth中的判斷邏輯就可以,只需要改動一處。

代碼配置化

在使用react編寫代碼的過程中,經(jīng)常用到這樣的情況,根據(jù)情況判斷是否展示對應的組件。

方法一(流水線工作)(bad)
function Business({status, bug}) {
    return (
        
            {
                status === 0
                    ? (
                        
123
) : null } { bug === 1 ? (
456
) : null }
); }

這樣的寫法如果僅僅只有一個其實還好,如果有很多個,在代碼中會造成代碼非常冗長,使假想一個頁面中如果有很多這樣的,代碼看起來非常ugly。所以建議將代碼分割開來,形成一個個小的組件,將對應的代碼封裝起來,將會使代碼可讀性提高一些。

方法二(組件粒度細化)(better)
function Business() {
    return (
        
            
            
        
    );
}

// One
function One({isShow}) {
    return (
        
            {
                isShow === true
                ? (
                    
123
) : null }
); } // Two function Two({isShow}) { return ( { isShow === true ? (
456
) : null }
); }

如果經(jīng)常這么寫是不是會覺得很煩,可以將通用的邏輯抽象為通用的組件。

方法三(高階組件)(better)

其實可以觀望一下decorator以后的用法,暫時沒有找到使用的切入點。

function IsShowCom(isShow, Wrapped) {
    if (isShow === true) {
        return (Wrapped) => 
    }
    return () => null;
}
// 如果你想轉(zhuǎn)發(fā)ref,你得這么做
function IsShowCom(isShow, Wrapped) {
    if (isShow === true) {
        return React.forwardRef((props, ref) => {
            return  
        });
    }
    return () => null;
}
// 
import IsShowCom from "./isShowCom";

function Business() {
    const One = IsShowCom(
        status === 0,
        
123
); const Two = IsShowCom( bug === 1,
456
); return ( ); }
注意??

不要在render中使用高階組件,因為高階組件每次返回來的都是新的組件,會使子組件的狀態(tài)丟失 。但是在無狀態(tài)組件中,這樣使用并沒有什么問題,因為無狀態(tài)組件本身就是隨參數(shù)的變化而變化的,只是可能會產(chǎn)生性能問題。

總結(jié)

前端配置化的整體思路:

針對不同值進行不同處理的時候,思考一下,是不是可以將判斷邏輯代碼集中起來。

針對組件的顯示/隱藏,可以將具體的隱藏邏輯封裝為高階組件,便于維護

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104528.html

相關(guān)文章

  • 前端能力中臺之路———— Fusion Design 成長史

    摘要:快速摧毀敵軍設(shè)施,殺傷有敵軍生力量,最小化己方傷亡。所以前端工程師在修改完樣式以后,需要反復和設(shè)計師還原度的問題。前端工程師依照主題包和設(shè)計稿進行前端工程開發(fā)。前端工程師很開心,因為不用去投入開發(fā)組件庫和調(diào)整還原度。作者: 暮塵 2019年05月11日在上海舉辦 FDCON 2019。筆者有幸受到邀請,參與這次盛會。這篇文章就是演講內(nèi)容的文字提煉版。 淺談中臺 在開始正文內(nèi)容之前,先簡單聊聊...

    MycLambert 評論0 收藏0
  • 微店前端工程的迭代史

    摘要:文章同步在微店前端工程化起步于一個內(nèi)部產(chǎn)品,對外我們有一個開源版本。這么長時間過去了,我們在前端工程化方面有了哪些變化遇到了哪些問題用怎樣的方案解決這些問題等等,值得為大家再分享。最終產(chǎn)品以命令行的形式發(fā)布。 文章同步在:https://github.com/hoperyy/bl... 微店前端工程化起步于一個內(nèi)部產(chǎn)品 vbuilder,對外我們有一個開源版本 bio-cli。 去年我...

    littlelightss 評論0 收藏0
  • 如何搭建一個功能復雜的前端配置框架(一)

    摘要:我們只需要配置一下就能生成一個頁面,這個如何實現(xiàn)呢我們慢慢道來技術(shù)選型框架搭建分析頁面只需一個容器,可以理解為一個,在加載頁面的時候,異步去分布式配置中心或其他獲取頁面配置,頁面配置單純的就是個字符串。 背景現(xiàn)在很多公司主要業(yè)務是c端,擁有巨大用戶和流量的同時,b端業(yè)務不可或缺,CRM,CMS,運營配置化管理平臺,數(shù)據(jù)可視化平臺,各種審批平臺。這些系統(tǒng)都有幾個共同的特點:需求多,變化快...

    13651657101 評論0 收藏0
  • 微內(nèi)核架構(gòu)在大型前端系統(tǒng)中的應用

    摘要:微內(nèi)核架構(gòu)在大型前端系統(tǒng)中的應用只討論架構(gòu),不討論框架名詞解釋由一群盡可能將數(shù)量最小化的軟件程序組成,他們負責提供實現(xiàn)一個操作系統(tǒng)所需要的各種機制和功能。而微內(nèi)核架構(gòu)已經(jīng)在操作系統(tǒng)和很多的產(chǎn)品的后端服務及前端中經(jīng)過了很多的實踐。 微內(nèi)核架構(gòu)在大型前端系統(tǒng)中的應用 只討論架構(gòu),不討論框架 1、名詞解釋 由一群盡可能將數(shù)量最小化的軟件程序組成,他們負責提供、實現(xiàn)一個操作系統(tǒng)所需要的各種機制...

    li21 評論0 收藏0

發(fā)表評論

0條評論

MSchumi

|高級講師

TA的文章

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