怎樣精確區分這些名詞:庫、插件、組件、控制項、擴展?
限於web前端和後端開發領域。
庫、框架、插件、載入項、擴展和控制項都是組件。
組件(Component)是是一個含義很大的概念,一般是指軟體系統的一部分,承擔了特定的職責,可以獨立於整個系統進行開發和測試,一個良好設計的組件應該可以在不同的軟體系統中被使用(可復用)。例如V8引擎是Chrome瀏覽器的一部分,負責運行javascript代碼,這裡V8引擎就可以視為一個組件。V8引擎同時也是Node.js的javascript解釋器,這體現了組件的可復用性。
庫(Library)是一系列預先定義好的數據結構和函數(對於面向對象語言來說,是類)的集合,程序員通過使用這些數據結構和函數實現功能。例如Moment.js是一個javascript庫,提供了處理時間的一些函數。
框架(Framework)也是一系列預先定義好的數據結構和函數,一般用於作為一個軟體的骨架,但程序真正的功能還需要由開發者實現。框架和庫的最大區別在於「控制反轉」,當你使用一個庫,你會調用庫中的代碼,而當你使用一個框架,框架會調用你的代碼。框架和庫是一個有交叉的概念,很多框架都是以庫的形式發布的,例如Java的Spring MVC框架,其發布的jar包本身就是一個庫。而一個庫如果也能通過依賴反轉的方式進行擴展,那也可以視為一個框架,例如Python的markdonw解析庫Python Markdown,可以添加自定義的解析擴展,那麼可以被視為一個markdonw解析框架。
下面這張圖出自這篇博客Library vs. Framework?,從調用方式的角度比較了庫和框架。
插件(Plugin)和擴展(extension)是兩個很相似的概念,我沒有辦法在軟體系統的角度給出這二者的區別。插件(或擴展)是對已有應用程序或者庫的功能補充,一個軟體的插件(或擴展)是實現了該軟體預定義介面的組件,用來向已有的軟體添加功能。插件在目標軟體發布時可以不預先包含,而是在運行時被使用者註冊,然後再被目標軟體調用。另一個很接近的概念是載入項(Add-on),可以認為載入項是插件(或擴展)的子集,是僅針對應用程序來說的功能補充。一個插件的例子是Flash的瀏覽器插件,為瀏覽器實現了運行Flash程序的功能。控制項(Control)是gui編程的一個概念,一般來說一個最終用戶可以看到的、可交互的組件,被稱為一個控制項。例如.NET編程中的System.Windows.Controls.Button是一個控制項。瀉藥
庫:為解決某種特定需求的程序功能集合插件:參與程序內部運行環節的一段或多段代碼集合擴展:使用程序API擴展程序適用面的一段或多段代碼集合組件:可重複使用並且可以和其他對象進行交互的對象控制項:提供或實現用戶界面功能的組件,控制項即組件,反之不一定。
類比一下
庫 library 圖書館 插件 plugin 優盤組件 component 樂高塊兒
控制項 control 樂高塊兒里的小人兒 擴展 extension 延長線library、component、control只要代碼中用到,就是必須的。plugin、extension是可選的、增強的、非必須的。二者在特定領域中可能有不同的工作方式:比如使用不同的API開發。component、control可以參考.NET中的組件與用戶控制項這個題待會肯定有人來詳細解答,但是題主還是別糾結了,與其把這些概念背的滾瓜爛熟,還不如用的得心應手。
cocoa平台的framework可是和庫差不多太糾結名字 那是學究 百無一用的 只能騙學生或者把別人搞暈
php角度
庫:相當於多個類的集合(可能說的不太準確)。插件:一個程序的擴展。擴展:一個語言的擴展。組件:多個模塊和對象的集合。控制項:與用戶和組件交互的。 library【庫】、component【組件】、contro【控制項】l只要代碼中用到,就是必須的。plugin【插件】、extension【擴展】是可選的、增強的、非必須的。二者在特定領域中可能有不同的工作方式:比如使用不同的API開發。component、control可以參考.NET中的組件與用戶控制項
其實不用區分。。。就是字面意思,對應英文不同,翻過來亂七八糟。
庫:即library,如jQuery,常用於方便dom操作、解決瀏覽器兼容等問題。
插件:即Plugin,插件很多如Modal、Masonry等等,差不多就是遵循一定規範寫出來方便程序展示效果的,如上面說到的模態框和瀑布流插件都是擁有特定功能且方便調用的。
組件:即Component,能復用的js代碼其實跟插件差不多,區別可能就是插件專註於特定功能而組件更專註於復用吧。
控制項:asp.net用過嗎?拖來拖去的那個,其實也就是組件。
拓展:這個不難理解吧?以php的角度來看:庫:相當於多個類的集合(可能說的不太準確)。插件:一個程序的擴展。擴展:一個語言的擴展。組件:多個模塊和對象的集合。控制項:與用戶和組件交互的。
推薦閱讀:
※sass、scss、less、compass、bootstrap學習的順序是什麼?
※沒有Fork而是直接拷貝代碼到自己的倉庫並進行修改增加新的功能,是否算抄襲?
※Sublime Text 3中如何一次性修改變數及其引用?
※在瀏覽器端,安全控制項跟 JS 加密的密碼有何區別?
※在大城市面試5k-10k的前端工程師需要注意什麼?
TAG:JavaScript | PHP | HTML5 | Nodejs |