frameworks - title字數 - 網頁標題




框架和庫之間有什麼區別? (14)

圖書館:

它只是一些例程 (函數式編程)或類定義 (面向對象編程)的集合 。 背後的原因只是代碼重用 ,即獲得已由其他開發人員編寫的代碼。 類或例程通常定義特定領域的特定操作 。 例如,有一些數學庫可以讓開發人員調用函數,而不用重新執行算法的工作方式。

框架:

在框架中,所有的控制流程已經存在,並且我們應該使用我們的代碼填寫 一堆預定義的白點 。 框架通常更複雜。 它定義了應用程序定義自己的特徵以填充骨架的骨架。 通過這種方式,您的代碼將在適當時由框架調用。 好處是開發人員不必擔心設計是否好,而只是實現特定於域的功能。

庫,框架和你的代碼圖像表示:

KeyDifference:

庫和框架之間的關鍵區別是“控制反轉” 。 當你從庫中調用一個方法時,你就可以控制。 但是對於一個框架來說,控制是相反的: 框架調用你 。 Source.

關係:

他們都定義了API,供程序員使用。 為了將它們放在一起,我們可以將庫視為應用程序的某個功能,將框架視為應用程序的框架,並且API是將它們放在一起的連接器。 典型的開發過程通常以框架開始,並通過API填寫庫中定義的函數。

框架之間有什麼區別?

我一直認為圖書館是一組關註解決特定問題或圍繞特定應用程序開發領域(即數據庫訪問)的對象和功能; 另一方面,框架是以特定方法論(即MVC)為中心的圖書館集合,涵蓋了應用程序開發的所有領域。


執行特定的,定義明確的操作。

框架是應用程序通過填充骨架來定義操作的“肉”的骨架。 骨架仍然有代碼鏈接部分,但最重要的工作是由應用程序完成的。

庫的例子:網絡協議,壓縮,圖像處理,字符串實用程序,正則表達式評估,數學。 操作是獨立的。

框架示例: Web應用程序系統,插件管理器,GUI系統。 框架定義了這個概念,但應用程序定義了最終用戶關心的基本功能。


你叫圖書館。

框架調用你。

図書館助け足場が痛い多くの涙


你的解釋對我來說聽起來很不錯...一個可以是任何編譯和自包含的用於在其他代碼中重用的內容,它的內容幾乎沒有限制。

另一方面, 框架預計會有一系列設施用於應用程序開發的某些特定領域,就像您的示例MVC一樣。


實際上這些術語可能意味著很多不同的事情,這取決於它們所使用的上下文。

例如,在Mac OS X上,框架就是庫,打包成一個包。 在包中你會發現一個實際的動態庫(libWhatever.dylib)。 裸露的庫與Mac上的框架之間的區別在於,框架可以包含庫的多個不同版本。 它可以包含額外的資源(圖像,本地化字符串,XML數據文件,UI對像等),除非該框架公開發布,它通常包含使用該庫所需的必要.h文件。

因此,你需要在應用程序中使用該庫的所有東西(沒有.h文件的C / C ++ / Objective-C庫非常沒用,除非你根據某些庫文檔自己編寫它們),而不是一堆文件可以移動(Mac軟件包只是Unix級別的一個目錄,但UI將它視為一個單獨的文件,就像在Java中有JAR文件一樣,當你點擊它時,你通常看不到裡面是什麼,除非你明確選擇顯示內容)。

維基百科把框架稱為“流行語”。 它定義了一個軟件框架

軟件框架是軟件系統(或子系統)的可重用設計。 軟件框架可能包括支持程序,代碼庫,腳本語言或其他軟件,以幫助開發和粘合軟件項目的不同組件。 框架的各個部分可能通過API暴露。

所以我想說一個圖書館就是這樣的“圖書館”。 它是一個對象/函數/方法(取決於你的語言)和你的應用程序“鏈接”的集合,因此可以使用對象/函數/方法。 它基本上是一個包含可重用代碼的文件,通常可以在多個應用程序之間共享(您不必一遍又一遍地編寫相同的代碼)。

框架可以是您在應用程序開發中使用的所有內容。 它可以是圖書館,許多圖書館的集合,腳本的集合或創建應用程序所需的任何軟件。 框架只是一個非常模糊的術語。

這裡有一篇關於“ 圖書館與框架 ”主題的文章。 我個人認為這篇文章是很有爭議的。 他在那裡說什麼並不是錯的,但是,他只是挑選了框架的多個定義之一,並將其與庫的經典定義進行了比較。 比如他說你需要一個子分類框架。 真? 我可以在庫中定義一個對象,我可以鏈接它,並在我的代碼中進行子類化。 我沒有看到我需要一個“框架”。 他在某種程度上解釋了現在如何使用術語框架。 正如我之前所說的那樣,這只是一個被大肆宣傳的詞彙。 有些公司只是發布一個普通的圖書館(從任何經典圖書館的意義上說),並稱之為“框架”,因為它聽起來更加花哨。


從Web開發人員角度來看

  1. 庫可以很容易地被另一個庫替換。 但框架不能。

    如果你不喜歡jQuery日期選擇器庫,你可以用其他日期選擇器替換,比如引導日期選擇器或者pickadate。

    如果你不喜歡在你的產品上構建的AngularJS,你不能用其他框架來替換。 你必須重寫你的整個代碼庫。

  2. 與框架相比,大多數圖書館的學習曲線非常少。 例如:underscore.js是一個庫,Ember.js是一個框架。


我喜歡科恩的回答,但更具技術性的定義是:你的代碼調用一個庫。 一個框架調用你的代碼 。 例如,GUI框架通過事件處理程序調用您的代碼。 Web框架通過一些請求 - 響應模型調用您的代碼。

這也被稱為控制的倒置 - 突然間框架決定何時以及如何執行你的代碼,而不是像庫一樣執行另一種方式。 這意味著一個框架對於你如何構造你的代碼也有很大的影響。


我忘了我在哪裡看到這個定義,但我認為它很好。

庫是從代碼中調用的模塊,框架是調用代碼的模塊。


我認為你很好地把握了它們的不同之處:框架提供了我們開展工作的框架......不知何故,它比簡單的圖書館更“約束”。
該框架也應該為一組庫增加一致性。


我認為庫是一組實用程序來實現目標(例如,套接字,密碼等)。 框架是庫+運行時環境。 例如,ASP.NET是一個框架:它接受HTTP請求,創建頁面對象,調用混亂事件等。框架完成所有這些工作,您將編寫一些代碼,這些代碼將在特定的生命週期當前請求!

無論如何,非常有意思的問題!


框架可以由不同的庫構成。 我們舉個例子吧。

假設你想煮咖哩魚。 那麼你需要像石油香料和其他公用事業的成分。 你還需要 ,這是你的基地準備你的菜(這是你的應用程序的數據)。 所有成分一起被稱為框架 。 現在你可以一個接一個地或一起使用它們來製作你的咖哩魚,這是你的最終產品 。 將其與由underscore.jsbootstrap.cssbootstrap.jsfontawesomeAngularJS等構成的Web框架進行比較。例如, Twitter Bootstrap v.35

現在,如果你只考慮一種成分,比如說說石油 。 你不能使用任何你想要的油,因為那樣會毀掉你的魚(數據)。 你只能使用橄欖油 。 將其與underscore.js進行比較。 現在你想使用什麼品牌的油取決於你。 有些菜是用美國橄欖油 (underscore.js)或印度橄欖油 (lodash.js)製成的。 這只會改變你的應用程序的味道。 由於它們的用途幾乎相同,因此它們的使用取決於開發人員的偏好,並且易於更換。

框架 :為您的應用程序提供獨特屬性和行為的庫集合。 (所有成分)

:一套明確定義的指令,為您的數據提供獨特的屬性和行為。 (油上魚)

插件 :一個庫(ui-router-> AngularJS)的實用程序構建或許多庫的組合(日期選擇器 - > bootstrap.css + jQuery)沒有它,你的插件現在可以按預期工作。

PS AngularJS是一個MVC框架,但是是一個JavaScript庫。 因為我相信庫擴展了本地技術的默認行為(在這種情況下為JavaScript)。


正如我一直描述的那樣:

庫是一種工具。

框架是一種生活方式。

一個圖書館,你可以使用任何微小的部分幫助你。 一個框架,你必須提交你的整個項目。



圖書館是為了便於使用和提高效率。例如,你可以說Zend圖書館可以幫助我們完成具有良好定義的類和功能的不同任務。雖然框架通常會強制某種方式實現解決方案,例如MVC(Model -view-controller) (reference) 。 它是一個定義良好的系統,用於分配MVC中的任務。模型包含數據庫端,視圖用於UI界面,控制器用於業務邏輯。