什麼叫組件化開發?

我很好奇為什麼越來越重視組件化開發,ext.js卻被邊緣化


我來答一下這個吧

  從第一代碼農寫下第一行代碼開始到上個世紀的80年代的軟體危機,碼農一直在考慮一個問題,怎麼讓寫代碼容易。拋開找大牛,大神程序員這條路(你以為大牛,大神那麼容易找啊),最後自然而然形成的一套思路就是大團隊的協同合作(如同cpu發展史一樣,從飆主頻到飆核數)。

  協同合作?----- 這個可就麻煩了。。。。團隊。。。。還合作。。。。

  幾乎所有的碼農開始代碼的時候(我強調了幾乎,不是全部,我強調了開始,不是所有時候)寫代碼的都是以自我為中心的。怎麼解釋這種情況呢,就是cow code---牛仔代碼,代碼風格隨意看心情。這就導致了寫代碼協作起來極為麻煩,為什麼呢?我寫代碼的時候 ,我和上帝知道什麼我寫的什麼,過了一個月就只有上帝知道寫的什麼了。這個問題在前端領域尤其嚴重,原因有如下幾點:

    1. 因為這個領域沒多少年
    2. html/js/css發明出來的時候就只玩玩而已的工具,技術棧非常不成熟。
    3. 這個領域人員水平參差不齊。
    4. 這個最坑爹了:JS是單線程的,CSS是全局的。。。尼瑪。。。。幾個人一起搞,一個bug全家玩完。。。

  你這讓人怎麼幹活。。。。活那麼多。。。。人那麼多。。。。相互坑不出活,老闆會fire掉大家的。

  很早就有人來想辦法解決這個問題,在軟代時代就已經有解決這個問題的法寶--組件化。當然那時候不是那麼叫的,是通過兩個原則來規範這個問題的,這兩個原則就是:內聚性和耦合性。

  意思就是:哥,我想按時回家哄妹子!!!你怎麼寫代碼我不管,你的功能全在這你這兒實現(內聚性),不要讓我還幫寫你那塊功能。另外,哥,求你了,你代碼不要block(影響)我的代碼(低耦合性)。

  既然解決問題的思路在這兒,前端大牛一代代前赴後繼的在這條路上狂奔下去。

第一代:YUI

  200X年的時候,這個框架火啊。把JS的坑都填了以後,比較low的事情就差不多解決完了。就直撲組件化,當時一派盛世,彷彿從此以後,前端界一馬平川,大家再也不用一行行代碼去寫了。

  YUI已經已經給了大家全部。。

  你要寫個切換頭圖----new Y.SlideShow,你要寫個時間取值----new Y.Timepicker。

  但是YUI還是倒在歷史的車輪下(jquery UI也類似),為什麼呢?

  YUI解決了組件化的問題,但是太過於學院派。要求每個用這個程序員如同學校里的好學生一樣要熟悉整套UI規範和使用規範。就是你還是要熟悉YUI的CSS,HTML,JS,這樣才能用非常爽。這就如同你如果你是個學渣,學霸把卷子給你抄了,如果你沒好好聽過課,給你抄你都會把delta 抄成8,會把sum_{a}^{b}{x} 抄成Eba。

第二代 ExtJS

  ExtJS是踩著YUI的屍體走過來的,第一版的extjs完全是拿yui改的。我第一次寫ExtJS寫東西的時候,我哭了。。。我感覺我要失業了。太特么,太特么,太特么好用了。這完全是給後端程序員的大大的禮物,看著一個個Java碼農寫著自己的業務邏輯,順帶著把前端全搞定,而且還比你們一個個前端碼農還搞得好得多的時候,完完全全的失落感啊,好像世界已經完全不需要前端了,整個世界都變黑了。。。。。。

  extjs比YUI進步在那兒呢,首先它表面上有一套漂亮的UI。這個實質上就是你不用寫CSS了,它幫你寫好了。另外你HTML也不用寫了,它也幫你寫好了。這不對啊,前端頁面怎麼可以沒有HTML和CSS呢----------------extjs都幫你封裝到js里了。。。

  這就如同你是個學渣,學霸把卷子給你抄了,而且這回的卷子還都是選擇題....

  這回是送分啊。。。。。

  可是PM、老闆不是吃素的。。。大家都有一身好手藝啊,難分高下啊,那來個附加題吧-----這一塊不太好看啊,加個閃閃的效果,那一塊左右動動吧。。。。。。。。

  extjs用是很簡單,定製的話。。。。。。還是改錯一處,全局。。。。。

第三代:web component

  w3c,google什麼的都突然有一天發現。iphone一出,我們的數錢數得手抽筋的好日子是快完了吧。以後感覺沒web什麼事了額。。。。。砸帥哥,霉女一見面都問裝啥app,都不用電腦,筆記本,更談不上看網頁了呢。。。。

  gg一想,"不行啊",然後google買了android,"還是不行啊,我現在這麼容易掙這麼多錢,我就是把android養大了也不見得掙現在這麼多錢額。我還是得把web這塊保住啊」,w3c趕緊附和道:「對,對,對」。然後大家都知道了chrome 拚命刷版本從1~47沒用幾年吧。。。。web的規範是一波波的出啊, es4,5,6,7全出來了。

  然後就有了web component橫空出世,帶著四個小弟shadow dom/custom element/template/import。

  這回組件化的卷子又有什麼不同呢?

  學校太差要被撤,學霸學渣站一條線上了,即然大家都要完,我們一起拼一把吧。

  「好」:學霸,學渣異口同聲

  然後學霸幫學渣把卷子都做好了,然後對學渣說:「哥,你寫上你名字吧!「

  這次的組件化完完全全不一樣了,custom element的出來的組件,可以是以前任意的東西,然後註冊成任意一個名字的組件,可以就&,也可叫&,反正你想叫啥,就叫啥,然後小夥伴(host)把你的組件(element)直接import進去了以後,完全不會影響大家的開發。注意,是完全不會影響,css只是組件局部,js也是只管自己的。終於實現了大家一起出力,各干各的,完全不會相互影響。。。。這可是真正的齊頭並進啊。

來個例子:

& & & &