摘要:一組件化首先引用維基百科的一段介紹基于組件的軟件工程,簡稱或基于組件的開發,簡稱是一種軟件開發范型。除此之外,組件化能夠有效降低甚至消除耦合。三黑箱繼續引用維基百科的一句話介紹黑箱,指一個只知道輸入輸出關系而不知道內部結構的系統或設備。
終于完成了公司的一個大project,這期間的收獲也非常多,對于“組件化開發”有了更深一層的心得體會。
在如今的前端開發中,“組件化”已經成為了一種流行,隨之而來的各種開發框架更是把這一概念發揚光大。但是概念歸概念,真正的“組件化”實踐還是有許多值得探討的地方,其中“黑箱”是我認為最具有代表性的實踐方式。今天就讓我們拋開具體的框架,直接來談一談“組件化開發”與“黑箱”。
一、組件化首先引用維基百科的一段介紹:
基于組件的軟件工程(Component-based software engineering,簡稱CBSE)或基于組件的開發(Component-Based Development,簡稱CBD)是一種軟件開發范型。它是現今軟件復用理論實用化的研究熱點,在組件對象模型的支持下,通過復用已有的構件,軟件開發者可以“即插即用”地快速構造應用軟件。這樣不僅可以節省時間和經費,提高工作效率,而且可以產生更加規范、更加可靠的應用軟件。
在業務的開發中,我們往往會把一些需要復用的部分抽取出來多帶帶封裝,在需要的時候再引入使用。這樣就相當于把這可復用的部分進行了“組件化”。組件化的操作能夠大大減少開發量,同時一個好的組件也能有效提升穩定性。在現代化的web開發中,“組件”通常包含了邏輯功能和樣式,各種各樣的UI庫正是最好的例子。比如一個交互復雜的下拉菜單,如果每次使用前都要重新寫一套代碼,將會徒增巨大的時間與人力成本。而通過UI庫,只需要簡單地引入,按照約定的寫法引用即可,大大解放了生產力。
除此之外,“組件化”能夠有效降低甚至消除耦合。我們知道“牽一發而動全身”,如果一個系統各模塊之間耦合太緊,一旦有個地方出現問題,排查起來將會非常困難,其后果可能是災難性的。而“組件化”的思路能夠很好地避免這個問題。因為組件之間是相互獨立,僅僅通過接口相聯系,一旦某個組件出現問題,只需要排查這個組件的故障即可,其他組件完全可以正常工作,或者等待這個組件修復后再工作。
二、純函數維基百科定義:
在程序設計中,若一個函數符合以下要求,則它可能被認為是純函數:
此函數在相同的輸入值時,需產生相同的輸出。函數的輸出和輸入值以外的其他隱藏信息或狀態無關,也和由I/O設備產生的外部輸出無關。
該函數不能有語義上可觀察的函數副作用,諸如“觸發事件”,使輸出設備輸出,或更改輸出值以外物件的內容等。
從數學來說,若定義一個函數:
f(x) = x + x
那么不管何時何地任何條件,只要我輸入1,那么一定會輸出2:
f(1) == 2
正是因為這種“純”的特性,所以允許對其進行“高階”:
f(x) = x + x g(x) = x * 2 h(x) = x * x h(g(f(1))) = 16
網絡上對于純函數和函數式編程的文章非常豐富,本文就不再贅述了。從我個人角度出發,只要能理解什么是“純”即可。
三、黑箱繼續引用維基百科的一句話介紹:
黑箱,指一個只知道輸入輸出關系而不知道內部結構的系統或設備。
生活中的很多東西都可以理解為“黑箱”,比如我們常用的手機,我們可能不知道它到底是怎么運行的,只知道我的手指劃過,它就會作出相應的動作,這時,手指劃過就是“輸入”,相應的動作就是“輸出”。因為輸入輸出如此直觀簡單,所以手機能夠被所有人輕松地使用。
我們的工作離不開電腦,現在電腦只要插上電源開機就能用,但是人類歷史上的第一臺電腦,卻是要專業人士花費一番功夫才能運行的龐然大物——因為使用者需要完全弄懂這臺機器的內部運行原理,才能夠正確地使用它。
上述的兩個例子,其實都是為了闡述一個觀點:黑箱更有利于使用。
但是,凡事都具有兩面性。黑箱是犧牲了使用者對于其內部構造和原理的認識,換來的易用性。如果黑箱內部出現故障,那么使用者無法得知具體原因,這個對于系統故障的排查非常不利。所以黑箱對于系統的穩定性、可靠性的要求非常高。
四、工程實踐經過前文的三個小節,應該不難理解我想表達的觀點。一個黑箱就是一個純函數,抽象出來的組件理應符合這種黑箱的設定:
組件之間僅通過接口聯系
一個組件可以接收多個參數,組件的嵌套和使用也是通過接口進行。組件在處理完傳入的參數后,應當把結果通過接口(或者事件)傳遞出去,而不能直接影響外部。比如下面這個例子,經過f(x)的處理,外部的num并不會被改變。
num = 1 f(x) = x + 1 // f(num) => 2 // num => 1
組件內部的運行原理不對用戶開放
很容易理解,組件應當是一個黑箱,用戶無需關注內部的實現原理。當然,組件應該保證高度的穩定性和可靠性。
組件的輸入輸出完全確定
結合“純函數”和“黑箱”的概念,一個組件應當是可預測的(predictable),只有完全確定的輸入輸出才能保證。因此在工程實踐中,強制規定輸入的數據類型、變量名之類的內容是非常必須的。
組件化的開發還有許多最佳實踐,比如涵蓋了一定邏輯功能的“業務組件”也是值得探討的地方。本文僅為個人在開發時的一些感悟,權當拋磚引玉,歡迎各位讀者和我共同交流~感謝閱讀~~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84412.html
摘要:產品級代理云服務連接性的黑箱方法產品級的軟件代理對一個具體的無線物聯網模塊硬件模型進行了預配置。云服務連接性的白箱方法只提供通過底層和標準化協議進行通信的通用庫。物聯網(IoT)的開發者可以選擇很多方法來創建與物聯網云服務的連接,每一個都有不同的優劣權衡。 怎么知道哪個選擇是較好的呢?將物聯網連接到云服務時,最快最簡單的方法就是使用一個全功能的物聯網軟件代理,就像那些物聯網平臺供應商提供的那...
摘要:于是,這些黑箱模型經常在學習過程中受到數據偏差的影響,而導致圖像推理的錯誤。程序生成器是由模型實現的。從左至右,每個問題都會向程序增加一個模塊,在上圖中,增加的模塊用下劃線表示。斯坦福大學表示將在最近將其開源。 深度學習著名學者 Yann LeCun 在社交網絡上也分享點評了這項研究:「在為視覺推理和問答學習生成程序上的非常棒的新成果。」論文鏈接:https://arxiv.org/abs/...
摘要:前言自總結完了上篇前端工程化的思想,并在全家桶的項目加以實踐,趁熱給大家總結一篇如何更有效率與質量地開發項目,以及其中踩過的一個個坑。。。 前言 自總結完了上篇前端工程化的思想,并在vue全家桶的項目加以實踐,趁熱給大家總結一篇如何更有效率與質量地開發vue項目,以及其中踩過的一個個坑。。。 基于vue-cli的自定義模板(Custom Templates) 小伙伴們的vue項目應該都...
摘要:最近想看一下源碼,搜到了這樣一篇博客從源碼學到的件事情本文基于這篇視頻博客,提煉了一些內容,分享給大家。的狀態選擇符,比如存放在里面 最近想看一下jQuery源碼,搜到了這樣一篇博客《從jQuery源碼學到的10件事情》http://www.paulirish.com/2010/10-things-i-learned-from-the-jquery-source/ 本文基于這篇視頻博...
閱讀 2955·2021-10-20 13:46
閱讀 2512·2021-08-12 13:22
閱讀 2693·2019-08-30 15:54
閱讀 2336·2019-08-30 15:53
閱讀 540·2019-08-30 13:47
閱讀 3574·2019-08-23 16:56
閱讀 1720·2019-08-23 13:02
閱讀 1790·2019-08-23 12:25