前端框架與庫的區別

框架就是提供了前端項目整體解決方案。庫就是自己組合來實現項目。

某種層面上來說,前端庫就像我平時家裏的工具箱,裏面有起子、錘子,我們可以通過這個工具箱來給小孩子創造玩具,我們甚至可以自己創造一些工具,方便我們日後創造玩具。而框架,更像是我們在淘寶上買好了車的骨架,回來後拼裝好了,可以根據自己的需要,貼上不同的貼紙,噴上不同的顏色,我們跟其他使用框架的人,拿到手上的玩具骨架都是一樣的,我們很難自己去改變。

前端基於JS的框架(frameworks)/庫(librarys)更是層出不窮,且各自都有其自身的優勢以及劣勢,有些是向開發使用者提供整套的服務,比如MVC一整套,有些則是專注於某一個點,比如專注於dom操作或異步請求;

框架與庫之間最本質區別在於控制權:you call libs, frameworks call you(控制反轉)

:庫是更多是一個封裝好的特定的集合,提供給開發者使用,而且是特定於某一方面的集合(方法和函數),庫沒有控制權,控制權在使用者手中,在庫中查詢需要的功能在自己的應用中使用,我們可以從封裝的角度理解庫;

框架:框架顧名思義就是一套架構,會基於自身的特點向用戶提供一套相當於叫完整的解決方案,而且控制權的在框架本身,使用者要找框架所規定的某種規範進行開發。

其實框架和庫關係還是很緊密的,他們以聚合的形式讓我們在所要開發的應用中使用;現在嘗試理解一下兩圖下圖:



在實際中,像angular、backbone、vue就屬於框架,而jQuery、react、underscore就是庫,在前者中我們完全可以自由的使用後者,同時也可以沒有前者的基礎之上使用後者,都是很自由,控制權始終在我們的手中,但是使用框架時候就必須按照它的規範來進行模塊化的開發;

可能有人會問react也是庫麼?的確它就是一個庫,爲什麼呢?

評論區:React和react-router, react-redux結合起來才叫框架,本身只是充當一個前端渲染的庫而已;感謝@米斯特white的提出

開頭有說到框架是有一套解決方案的,react就是純粹寫UI組件的 沒有什麼異步處理機制、模塊化、表單驗證這些


庫、插件、組件、控件、擴展


組件本質:封裝。一定程度上可以約等於模塊化,調用者只需關注輸入和輸出,總思想就是分而治之、重複利用。低耦合;
組件解決資源整合問題、增強功能促進開發效率。提高可維護性,便於協同開發,每個模塊都可以分拆爲一個組件,例如異步請求組件,路由組件,各個視圖組件。


庫:爲解決某種特定需求的程序功能集合;即library,如jQuery,常用於方便dom操作、解決瀏覽器兼容等問題。
插件:參與程序內部運行環節的一段或多段代碼集合;即Plugin,遵循一定規範寫出來方便程序展示效果,擁有特定功能且方便調用。如輪播圖和瀑布流插件,
擴展:使用程序API擴展程序適用面的一段或多段代碼集合;即Extension,
組件:可重複使用並且可以和其他對象進行交互的對象;即Component,能複用的js代碼其實跟插件差不多,區別可能就是插件專注於特定功能而組件更專注於複用吧。
控件:提供或實現用戶界面功能的組件,控件即組件,反之不一定。即Control,


組件(Component)是是一個含義很大的概念,一般是指軟件系統的一部分,承擔了特定的職責,可以獨立於整個系統進行開發和測試,一個良好設計的組件應該可以在不同的軟件系統中被使用(可複用)。例如V8引擎是Chrome瀏覽器的一部分,負責運行javascript代碼,這裏V8引擎就可以視爲一個組件。V8引擎同時也是Node.js的javascript解釋器,這體現了組件的可複用性。

庫(Library)是一系列預先定義好的數據結構和函數(對於面嚮對象語言來說,是類)的集合,程序員通過使用這些數據結構和函數實現功能。例如Moment.js是一個javascript庫,提供了處理時間的一些函數。

框架(Framework)也是一系列預先定義好的數據結構和函數,一般用於作爲一個軟件的骨架,但程序真正的功能還需要由開發者實現。框架和庫的最大區別在於“控制反轉”,當你使用一個庫,你會調用庫中的代碼,而當你使用一個框架,框架會調用你的代碼。框架和庫是一個有交叉的概念,很多框架都是以庫的形式發佈的,例如Java的Spring MVC框架,其發佈的jar包本身就是一個庫。而一個庫如果也能通過依賴反轉的方式進行擴展,那也可以視爲一個框架,例如Python的markdonw解析庫Python Markdown,可以添加自定義的解析擴展,那麼可以被視爲一個markdonw解析框架。

插件(Plugin)和擴展(extension)是兩個很相似的概念,我沒有辦法在軟件系統的角度給出這二者的區別。插件(或擴展)是對已有應用程序或者庫的功能補充,一個軟件的插件(或擴展)是實現了該軟件預定義接口的組件,用來向已有的軟件添加功能。插件在目標軟件發佈時可以不預先包含,而是在運行時被使用者註冊,然後再被目標軟件調用。另一個很接近的概念是加載項(Add-on),可以認爲加載項是插件(或擴展)的子集,是僅針對應用程序來說的功能補充。一個插件的例子是Flash的瀏覽器插件,爲瀏覽器實現了運行Flash程序的功能。

控件(Control)是gui編程的一個概念,一般來說一個最終用戶可以看到的、可交互的組件,被稱爲一個控件。例如.NET編程中的System.Windows.Controls.Button是一個控件。


轉載:https://zhuanlan.zhihu.com/p/26078359?group_id=830801800406917120

   http://blog.csdn.net/bluesky1215/article/details/68922920

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章