本文译自:「链接」
库(Libraries)是提供特定功能(如建立网络连接)的低级组件。框架(Framework)是已知的编程环境,比如SpringBoot。
当软件主管开始构建新的企业应用程序时,他们必须决定要使用哪一组库和框架。这引出了一个明显的问题:软件库和框架之间有什么区别?
库和软件框架都有助于应用程序的开发。但是,两者之间的主要区别在于它们的任务范围,以及它们减轻开发人员编写代码负担的方式。
库提供了开发人员可以调用来执行特定功能的组件、类和方法。相比之下,框架提供的代码已经执行了通常需要的功能,并在需要定制功能时调用开发人员提供的代码。
库与框架
库是一组相关的低级组件,开发人员调用这些组件来实现特定结果。常用库函数包括日期格式化和建立网络连接。
框架处理更高级别的问题。框架提供了一个既定的编程环境,它本身建立在低级库之上。
例如,框架可能会处理如何最好地将应用程序中的所有对象映射到相关数据库中的表中。它还可以处理如何向最终用户提供丰富的、基于Web的体验。
软件库示例
一个库的例子是Java日期和时间API。它是一组定义属性和方法的类和接口,开发人员可以使用这些属性和方法来格式化日期、执行时区转换并提供全局日历支持。Java开发人员在需要时实例化Date和Time类,并以他们认为合适的任何方式调用库的方法。
另一个Java库示例是流行的java.net网络I/O包。该库由数十个类和接口组成,开发人员使用这些类和接口来打开网络端口、处理传入连接并将数据发送到互连的客户端。
只需要使用java.net包,软件开发人员就可以实现处理基于REST的Web服务或通过HTTP协议的基于HTML的请求-响应循环所需的所有必要逻辑。java.net库提供了一组低级API,任何开发人员都可以使用这些API来开发通过网络进行通信的应用程序。
流行的Java库
其他流行的Java库,包括已经利用了Java框架的SpringBoot、JHipster或Vaadin等的库,包括:
ApacheCommonsMath
BouncyCastleforcryptography
JavaAdvancedImaging
JavaSpeech
Java3D
JavaMail
Joda-Time
ApacheCollections
JacksonforJSONandXML
JavaNetworking
软件框架的作用
企业项目通常需要开发人员提供一组RESTfulAPI,以便外部客户端与在线应用程序集成。然而,许多开发人员不仅解决了如何使用低级java.net库来处理RESTfulAPI调用的问题,而且还将他们的工作作为开源项目来分享。这是软件框架的本质。它是一个现有项目,解决了一个常见且具有挑战性的问题,开发人员可以在自己的项目中使用它。
框架是解决常见且具有挑战性的问题的现有项目,开发人员可以在自己的项目中使用它。
在给定的问题域中,通常有许多框架可供选择。在Java生态系统中,有许多流行的框架使用标准的Java和JakartaEE库来解决如何最好地处理基于REST的请求-响应周期的问题,包括:
SpringBoot
Jersey
RESTEasy
Restlet
Micronaut
ApacheCFX
JAX-RS
框架有观点
将框架与库区分开来的另一个关键特征是后者通常包括关于如何解决给定问题、问题的范围以及如何以最有效和最有效的方式解决框架目标的观点。
框架将在各种非功能性需求上展开竞争,例如易用性、性能、可插入性和兼容性。
框架和控制反转
最后,库和框架之间的一个关键区别因素是两者之间的相对控制反转(IoC)。IoC通常被称为好莱坞原则。与库不同,框架对开发人员编写的代码采取“不要打电话给我们,我们会打电话给你”的方法。
要使用库开发应用程序,开发人员必须实例化库组件并调用其中存在的类和接口的方法。例如,如果开发人员想要使用java.net库来创建他们自己的RESTful应用程序,他们将需要调用各种API来打开端口、处理HTTP连接、将数据格式化为XML或JSON表示形式来回通信,以及当客户端发起请求时发起一个请求。
另一方面,框架负责支持项目核心功能所需的所有底层管道。只有在需要时,框架才会调用开发人员提供的代码。
IoC和SpringBoot
用SpringBoot编写的RESTfulWeb服务很好地体现了IoC的好莱坞原则。
使用SpringBootRESTfulWeb服务,开发人员只需编写在发生基于HTTP的GET调用时要执行的逻辑。当GET调用发生时,SpringBoot框架会处理它,解释它,将数据交换格式转换为JSON或XML,然后将RESTful请求路由到开发人员的业务逻辑。
开发人员只需要编写业务逻辑。由框架决定何时调用业务逻辑。
IoC框架在Java中很常见。以下是十个常见的例子。
Hibernate
Struts
JavaServerFaces
PlayforScala
Vaadin
JHipster
JRuby
JUnit
Quarkus
Grails
框架和库一起使用
虽然框架和库有不同的功能,但它们都可以帮助开发者完成更多工作。当许多常见的编程挑战已经被解决并以许可的开源项目的形式被共享时,没有软件专业人员愿意浪费时间重复发明轮子。
每当您启动一个新的软件开发项目时,选择一个已被证明和建立的软件开发框架非常重要。同时,与您的个人开发和设计理念保持一致。在极少数情况下,特定的情况超出了所选框架的范围,标准库总是在那里帮助您的开发人员弥合差距。
转载请注明:http://www.0431gb208.com/sjszlff/3483.html