軟件庫與框架的區別

【注】本文譯自:https://www.theserverside.com/tip/Library-vs-framework-How-these-software-artifacts-differjava

  庫與框架:這兩個軟件構件的區別庫(Libraries)是提供特定功能(如創建網絡鏈接)的低級組件。框架(Framework)是已知的編程環境,好比 Spring Boot。
  當軟件主管開始構建新的企業應用程序時,他們必須決定要使用哪一組庫和框架。 這引出了一個明顯的問題:軟件庫和框架之間有什麼區別?
  庫和軟件框架都有助於應用程序的開發。可是,二者之間的主要區別在於它們的任務範圍,以及它們減輕開發人員編寫代碼負擔的方式。
  庫提供了開發人員能夠調用來執行特定功能的組件、類和方法。相比之下,框架提供的代碼已經執行了一般須要的功能,並在須要定製功能時調用開發人員提供的代碼。數據庫

庫與框架

  庫是一組相關的低級組件,開發人員調用這些組件來實現特定結果。經常使用庫函數包括日期格式化和創建網絡鏈接。
  框架處理更高級別的問題。框架提供了一個既定的編程環境,它自己創建在低級庫之上。
  例如,框架可能會處理如何最好地將應用程序中的全部對象映射到相關數據庫中的表中。它還能夠處理如何向最終用戶提供豐富的、基於 Web 的體驗。
編程

軟件庫示例

  一個庫的例子是 Java 日期和時間 API。它是一組定義屬性和方法的類和接口,開發人員可使用這些屬性和方法來格式化日期、執行時區轉換並提供全局日曆支持。Java 開發人員在須要時實例化 Date 和 Time 類,並以他們認爲合適的任何方式調用庫的方法。
  另外一個 Java 庫示例是流行的 java.net 網絡 I/O 包。該庫由數十個類和接口組成,開發人員使用這些類和接口來打開網絡端口、處理傳入鏈接並將數據發送到互連的客戶端。
  只須要使用 java.net 包,軟件開發人員就能夠實現處理基於 REST 的 Web 服務或經過 HTTP 協議的基於 HTML 的請求-響應循環所需的全部必要邏輯。java.net 庫提供了一組低級 API,任何開發人員均可以使用這些 API 來開發經過網絡進行通訊的應用程序。segmentfault

流行的 Java 庫

  其餘流行的 Java 庫,包括已經利用了 Java 框架的 Spring Boot、JHipster 或 Vaadin 等 的庫,包括:網絡

  • Apache Commons Math
  • BouncyCastle for cryptography
  • Java Advanced Imaging
  • Java Speech
  • Java 3D
  • JavaMail
  • Joda-Time
  • Apache Collections
  • Jackson for JSON and XML
  • Java Networking

軟件框架的做用

  企業項目一般須要開發人員提供一組 RESTful API,以便外部客戶端與在線應用程序集成。然而,許多開發人員不只解決了如何使用低級 java.net 庫來處理 RESTful API 調用的問題,並且還將他們的工做做爲開源項目來分享。這是軟件框架的本質。它是一個現有項目,解決了一個常見且具備挑戰性的問題,開發人員能夠在本身的項目中使用它。框架

  框架是解決常見且具備挑戰性的問題的現有項目,開發人員能夠在本身的項目中使用它。ide

  在給定的問題域中,一般有許多框架可供選擇。在 Java 生態系統中,有許多流行的框架使用標準的 Java 和 Jakarta EE 庫來解決如何最好地處理基於 REST 的請求-響應週期的問題,包括:函數

  • Spring Boot
  • Jersey
  • RESTEasy
  • Restlet
  • Micronaut
  • Apache CFX
  • JAX-RS

框架有觀點

  將框架與庫區分開來的另外一個關鍵特徵是後者一般包括關於如何解決給定問題、問題的範圍以及如何以最有效和最有效的方式解決框架目標的觀點。
  框架將在各類非功能性需求上展開競爭,例如易用性、性能、可插入性和兼容性。性能

框架和控制反轉

  最後,庫和框架之間的一個關鍵區別因素是二者之間的相對控制反轉 (IoC)。IoC 一般被稱爲好萊塢原則。與庫不一樣,框架對開發人員編寫的代碼採起「不要打電話給咱們,咱們會打電話給你」的方法。
  要使用庫開發應用程序,開發人員必須實例化庫組件並調用其中存在的類和接口的方法。例如,若是開發人員想要使用 java.net 庫來建立他們本身的 RESTful 應用程序,他們將須要調用各類 API 來打開端口、處理 HTTP 鏈接、將數據格式化爲 XML 或 JSON 表示形式來回通訊,以及當客戶端發起請求時發起一個請求。
  另外一方面,框架負責支持項目核心功能所需的全部底層管道。只有在須要時,框架纔會調用開發人員提供的代碼。url

IoC 和 Spring Boot

  用 Spring Boot 編寫的 RESTful Web 服務很好地體現了 IoC 的好萊塢原則。
  使用 Spring Boot RESTful Web 服務,開發人員只需編寫在發生基於 HTTP 的 GET 調用時要執行的邏輯。當 GET 調用發生時,Spring Boot 框架會處理它,解釋它,將數據交換格式轉換爲 JSON 或 XML,而後將 RESTful 請求路由到開發人員的業務邏輯。
  開發人員只須要編寫業務邏輯。由框架決定什麼時候調用業務邏輯。
  IoC 框架在 Java 中很常見。如下是十個常見的例子。

  • Hibernate
  • Struts
  • JavaServer Faces
  • Play for Scala
  • Vaadin
  • JHipster
  • JRuby
  • JUnit
  • Quarkus
  • Grails

框架和庫一塊兒使用

  雖然框架和庫有不一樣的功能,但它們均可以幫助開發者完成更多工做。當許多常見的編程挑戰已經被解決並以許可的開源項目的形式被共享時,沒有軟件專業人員願意浪費時間重複發明輪子。  每當您啓動一個新的軟件開發項目時,選擇一個已被證實和創建的軟件開發框架很是重要。同時,與您的我的開發和設計理念保持一致。在極少數狀況下,特定的狀況超出了所選框架的範圍,標準庫老是在那裏幫助您的開發人員彌合差距。

相關文章
相關標籤/搜索