【注】本文译自:https://www.theserverside.com/tip/Library-vs-framework-How-these-software-artifacts-differ
库与框架:这两个软件构件的区别库(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 来开发通过网络进行通信的应用程序。
流行的 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 调用的问题,而且还将他们的工作作为开源项目来分享。这是软件框架的本质。它是一个现有项目,解决了一个常见且具有挑战性的问题,开发人员可以在自己的项目中使用它。
框架是解决常见且具有挑战性的问题的现有项目,开发人员可以在自己的项目中使用它。
在给定的问题域中,通常有许多框架可供选择。在 Java 生态系统中,有许多流行的框架使用标准的 Java 和 Jakarta EE 库来解决如何最好地处理基于 REST 的请求-响应周期的问题,包括:
- Spring Boot
- Jersey
- RESTEasy
- Restlet
- Micronaut
- Apache CFX
- JAX-RS
框架有观点
将框架与库区分开来的另一个关键特征是后者通常包括关于如何解决给定问题、问题的范围以及如何以最有效和最有效的方式解决框架目标的观点。
框架将在各种非功能性需求上展开竞争,例如易用性、性能、可插入性和兼容性。
框架和控制反转
最后,库和框架之间的一个关键区别因素是两者之间的相对控制反转 (IoC)。IoC 通常被称为好莱坞原则。与库不同,框架对开发人员编写的代码采取“不要打电话给我们,我们会打电话给你”的方法。
要使用库开发应用程序,开发人员必须实例化库组件并调用其中存在的类和接口的方法。例如,如果开发人员想要使用 java.net 库来创建他们自己的 RESTful 应用程序,他们将需要调用各种 API 来打开端口、处理 HTTP 连接、将数据格式化为 XML 或 JSON 表示形式来回通信,以及当客户端发起请求时发起一个请求。
另一方面,框架负责支持项目核心功能所需的所有底层管道。只有在需要时,框架才会调用开发人员提供的代码。
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
框架和库一起使用
虽然框架和库有不同的功能,但它们都可以帮助开发者完成更多工作。当许多常见的编程挑战已经被解决并以许可的开源项目的形式被共享时,没有软件专业人员愿意浪费时间重复发明轮子。
每当您启动一个新的软件开发项目时,选择一个已被证明和建立的软件开发框架非常重要。同时,与您的个人开发和设计理念保持一致。在极少数情况下,特定的情况超出了所选框架的范围,标准库总是在那里帮助您的开发人员弥合差距。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。