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

資訊專(zhuān)欄INFORMATION COLUMN

如何降低前端開(kāi)發(fā)的復(fù)雜度

LinkedME2016 / 1518人閱讀

摘要:我們作為前端開(kāi)發(fā),都應(yīng)該具有這樣的能力。那么如何才能降低業(yè)務(wù)開(kāi)發(fā)的復(fù)雜度呢細(xì)分組件都說(shuō)模塊化開(kāi)發(fā),其實(shí)在,這些思想規(guī)范之前就已經(jīng)有模塊化開(kāi)發(fā)的規(guī)范了,雖然標(biāo)準(zhǔn)從然后隔了年才有了,在那年基本都是函數(shù)式開(kāi)發(fā),一切皆函數(shù)。

優(yōu)秀的程序員總是能優(yōu)雅的組織自己的代碼,清晰的編寫(xiě)思路,合理的組織結(jié)構(gòu)劃分,從小的功能組件,到大的模塊結(jié)構(gòu),都能通過(guò)合理的巧妙的搭配,不僅能化復(fù)雜為簡(jiǎn)單,更能提升代碼運(yùn)行效率,提高代碼的可維護(hù)性。我們作為前端開(kāi)發(fā),都應(yīng)該具有這樣的能力。

那么如何才能降低業(yè)務(wù)開(kāi)發(fā)的復(fù)雜度呢?

細(xì)分組件

都說(shuō)模塊化開(kāi)發(fā),其實(shí)在AMD,CMD這些思想規(guī)范之前就已經(jīng)有模塊化開(kāi)發(fā)的規(guī)范了,雖然JavaScript標(biāo)準(zhǔn)從es1-es4 然后隔了n年才有了es5,在那N年基本都是‘函數(shù)式開(kāi)發(fā)’,一切皆函數(shù)。之前還沒(méi)有模塊化加載的思想,畢竟也不需要,富客戶端還是flash的天下,基本都是簡(jiǎn)單的網(wǎng)頁(yè)嵌套一些后端的代碼邏輯,然后通過(guò)后端渲染引擎渲染或者解釋器解釋產(chǎn)出html頁(yè)面,什么ASP,PHP,JSP等等。

然而之前的模塊化稱(chēng)不上是模塊,為什么呢?因?yàn)闆](méi)有模塊加載器,主要是通過(guò)JS加載順序來(lái)控制加載的,依賴的JS文件放在前面。模塊主要是按照文件來(lái)劃分,每個(gè)文件是個(gè)獨(dú)立的功能模塊,在自定義的命名空間下掛在需要暴露出來(lái)的函數(shù),其他函數(shù)可以調(diào)用。當(dāng)然也有一些打包工具,可以根據(jù)事先定義好的文件列表,把多個(gè)文件打包成一個(gè)bundle。

而現(xiàn)在,且不說(shuō)你是喜歡自己編寫(xiě)或者用現(xiàn)有的模塊加載器,或者直接用像Angular,React,Vue等現(xiàn)成的腳手架做開(kāi)發(fā),當(dāng)然自帶的就有了模塊加載,配合Webpack、Rollup等打包工具,可以完美構(gòu)建你想要的項(xiàng)目加購(gòu)。

所以呢,建議還是要按照功能和業(yè)務(wù)結(jié)構(gòu)劃分你的組件,這樣呢一方面可以將功能解耦,一方面方便實(shí)現(xiàn)各自的業(yè)務(wù)邏輯,滿足keep it simple的原則,模塊自制。組件細(xì)分的得當(dāng),就不會(huì)出現(xiàn)一大堆函數(shù)代碼,來(lái)回修改各種狀態(tài),一堆變量,一個(gè)函數(shù)寫(xiě)幾十行那樣。

建議:ES6 module + 函數(shù)式編程 + webpack/rollup ,絕對(duì)可以滿足你的需要,關(guān)于業(yè)務(wù)如何拆分,拆分的維度,后面介紹。

獨(dú)立狀態(tài)維護(hù)

狀態(tài)是什么?狀態(tài)是數(shù)據(jù)。

程序是什么?程序是數(shù)據(jù)+代碼。

所以可見(jiàn)數(shù)據(jù)的重要性,如何維護(hù)好一份數(shù)據(jù)至關(guān)重要。那么前面我們說(shuō)了細(xì)分組件,數(shù)據(jù)呢? 數(shù)據(jù)是跟著組件的,那么數(shù)據(jù)自然也是需要做劃分了。這里面說(shuō)的是獨(dú)立狀態(tài)維護(hù)。假設(shè)一個(gè)組件的代碼是這樣的。

/**  約定規(guī)范 **/
// 狀態(tài)
const state={
}
//行為
const actions={
    init:()=>{
    //組織聲明周期
   }
}
//視圖

const view=()=>(
    
)

這樣很清晰的將程序代碼劃分成了狀態(tài)、邏輯和視圖。邏輯操作狀態(tài),視圖更新展示狀態(tài)。

為什么說(shuō)要獨(dú)立狀態(tài)維護(hù)呢?也是為了降低耦合、提升組件復(fù)用。組件的狀態(tài)應(yīng)該只是包含組件需要的數(shù)據(jù),而不應(yīng)該包含其他多余的數(shù)據(jù),按照軟件設(shè)計(jì)單一職責(zé)的原則,組件的職責(zé)應(yīng)該也是單一的,就是負(fù)責(zé)這個(gè)組件的增刪改的功能。

需要說(shuō)明的是組件的開(kāi)發(fā)應(yīng)該也是需要遵守?cái)?shù)據(jù)驅(qū)動(dòng)化的開(kāi)發(fā)模式,避免直接操作DOM,即使是從DOM上拿數(shù)據(jù),有同學(xué)喜歡這么干哈,把數(shù)據(jù)通過(guò)data-x屬性掛在節(jié)點(diǎn)上,然后通過(guò)節(jié)點(diǎn)獲取數(shù)據(jù),這樣操作是不好的,首先這種操作有副作用,而且容易引發(fā)bug,而且也可能有安全風(fēng)險(xiǎn)。

細(xì)心的同學(xué)可能要問(wèn),那么組件通信怎么辦呢?組件之間的交互可以通過(guò)注冊(cè)函數(shù)hook的形式進(jìn)行。當(dāng)前你也可以做一個(gè)事件注冊(cè)和分發(fā)的功能,不過(guò)一般一個(gè)SPA頁(yè)面不需要做的這么復(fù)雜,如果真的是很復(fù)雜的頁(yè)面,還是建議做成做個(gè)頁(yè)面。沒(méi)必要做成一個(gè)大大的SPA。

函數(shù)式編程

關(guān)于fp函數(shù)式編程github地址:https://github.com/chalecao/fp
這里并不是來(lái)討論函數(shù)式編程和OOP編程的好壞,你可以二者都用,也可以用其中一種,并沒(méi)有限制,看個(gè)人喜好。
我個(gè)人呢之前經(jīng)常都是class 還有extends混入高級(jí)的this。后來(lái)漸漸轉(zhuǎn)向了fp函數(shù)式編程,完完全全可以避免使用new,避免使用this,而且結(jié)合上面 獨(dú)立狀態(tài)維護(hù) 中的結(jié)構(gòu)劃分,結(jié)合ES6的模塊劃分,可以很優(yōu)雅的實(shí)現(xiàn)我所有需要實(shí)現(xiàn)的業(yè)務(wù)邏輯功能。

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

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

相關(guān)文章

  • 如何降低前端開(kāi)發(fā)復(fù)雜度

    摘要:我們作為前端開(kāi)發(fā),都應(yīng)該具有這樣的能力。那么如何才能降低業(yè)務(wù)開(kāi)發(fā)的復(fù)雜度呢細(xì)分組件都說(shuō)模塊化開(kāi)發(fā),其實(shí)在,這些思想規(guī)范之前就已經(jīng)有模塊化開(kāi)發(fā)的規(guī)范了,雖然標(biāo)準(zhǔn)從然后隔了年才有了,在那年基本都是函數(shù)式開(kāi)發(fā),一切皆函數(shù)。 優(yōu)秀的程序員總是能優(yōu)雅的組織自己的代碼,清晰的編寫(xiě)思路,合理的組織結(jié)構(gòu)劃分,從小的功能組件,到大的模塊結(jié)構(gòu),都能通過(guò)合理的巧妙的搭配,不僅能化復(fù)雜為簡(jiǎn)單,更能提升代碼運(yùn)行...

    wushuiyong 評(píng)論0 收藏0
  • 如何降低前端開(kāi)發(fā)復(fù)雜度

    摘要:我們作為前端開(kāi)發(fā),都應(yīng)該具有這樣的能力。那么如何才能降低業(yè)務(wù)開(kāi)發(fā)的復(fù)雜度呢細(xì)分組件都說(shuō)模塊化開(kāi)發(fā),其實(shí)在,這些思想規(guī)范之前就已經(jīng)有模塊化開(kāi)發(fā)的規(guī)范了,雖然標(biāo)準(zhǔn)從然后隔了年才有了,在那年基本都是函數(shù)式開(kāi)發(fā),一切皆函數(shù)。 優(yōu)秀的程序員總是能優(yōu)雅的組織自己的代碼,清晰的編寫(xiě)思路,合理的組織結(jié)構(gòu)劃分,從小的功能組件,到大的模塊結(jié)構(gòu),都能通過(guò)合理的巧妙的搭配,不僅能化復(fù)雜為簡(jiǎn)單,更能提升代碼運(yùn)行...

    xorpay 評(píng)論0 收藏0
  • ELSE 技術(shù)周刊(2017.10.16期)

    摘要:前端中的計(jì)算機(jī)領(lǐng)域的通常認(rèn)為起源于。并對(duì)其主要內(nèi)容作了自己的解讀。搬到另一個(gè)地區(qū)會(huì)導(dǎo)致名氣降低。年度報(bào)告,年最受歡迎的編程語(yǔ)言年上最流行的種編程語(yǔ)言及前十最火熱的項(xiàng)目排行榜,分別由及登頂。技術(shù)周刊由小組出品,匯聚一周好文章,周刊原文。 showImg(https://segmentfault.com/img/bVWHC4?w=1000&h=710); 本期推薦 反擊爬蟲(chóng),前端工程師的腦...

    0xE7A38A 評(píng)論0 收藏0
  • ESLint 在中大型團(tuán)隊(duì)應(yīng)用實(shí)踐

    摘要:自動(dòng)化接入和升級(jí)方案通過(guò)命令行工具提供一鍵接入升級(jí)能力,同時(shí)集成到團(tuán)隊(duì)腳手架中,大大降低了工程接入和維護(hù)的成本。原始代碼經(jīng)過(guò)解析器的解析,在管道中逐一經(jīng)過(guò)所有規(guī)則的檢查,最終檢測(cè)出所有不符合規(guī)范的代碼,并輸出為報(bào)告。 引言 代碼規(guī)范是軟件開(kāi)發(fā)領(lǐng)域經(jīng)久不衰的話題,幾乎所有工程師在開(kāi)發(fā)過(guò)程中都會(huì)遇到,并或多或少會(huì)思考過(guò)這一問(wèn)題。隨著前端應(yīng)用的大型化和復(fù)雜化,越來(lái)越多的前端工程師和團(tuán)隊(duì)開(kāi)始重...

    alogy 評(píng)論0 收藏0
  • 方案設(shè)計(jì)--如何看待前端框架選型 ?

    摘要:純前端開(kāi)發(fā)主要是針對(duì)靜態(tài)頁(yè)面。自主權(quán)最大,正常是使用進(jìn)行輔助開(kāi)發(fā),上線等。大致原因使用是為了和端的保持同步。四總結(jié)對(duì)于比較正式的項(xiàng)目,前端技術(shù)選型策略一定是產(chǎn)品收益最大化,用戶在首位。 對(duì)于前端團(tuán)隊(duì),可以實(shí)現(xiàn)企業(yè)受益最大化要點(diǎn)。 一、技術(shù)選型的策略 1、保證產(chǎn)品質(zhì)量 (1)功能穩(wěn)健:網(wǎng)頁(yè)不白屏,不錯(cuò)位,不卡死;操作正常;數(shù)據(jù)精準(zhǔn)。 (2)體驗(yàn)優(yōu)秀:加載體驗(yàn),交互體驗(yàn),視覺(jué)體驗(yàn),無(wú)障礙訪...

    gnehc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<