软件框架与库

2025年3月17日 | 阅读 8 分钟

许多用户并不了解框架和库之间的显著区别。如果用户想成为一名优秀的开发者(或编码者),理解这一点非常重要。框架通常被认为是多个库的集合。然而,这并不完全正确。“谁调用谁”意味着调用者/被调用者的关系定义了这两个术语的区别。如果我们谈论库,“它是用户编写的代码调用其他人编写的库中的代码”。

那么“库”这个术语的实际含义是什么?

总的来说,库是一组预定义的函数和类,开发者可以使用它们来简化工作并加速开发过程。这意味着这些函数和类的代码已经写在库中,开发者不需要为某些特定功能编写代码,他们可以通过自己的代码调用和使用库中的代码。

从一般意义上讲,任何典型库的大小都不大。尽管如此,库通常专注于狭窄的范围,例如字符串、套接字、IO,因此其API的大小也很小,并且只需要很少的依赖项。库只是一个带有定义的类集合。

我们为什么需要库?

这个问题的答案很简单,例如,重用其他人(或其他开发者)已经编写的代码,这有助于开发者避免为已经编写在库中的某个功能编写代码。

我们可以通过一个例子来理解库的重要作用

示例

在某些库中,有一个名为“findLastInde()”的方法。此方法的定义是为了查找字符串中传递为参数的特定字符的索引。因此,我们可以简单地调用“findLastIndex(要查找的字符)”方法,并通过在括号中编写字符来传递该字符,例如“findLastIndex(A)”,我们要搜索它的位置。

如何创建库?

假设我们有一个程序,我们计划在其中处理字符串,并希望保持我们的代码“DRY”(不要重复自己),我们将编写一些可重用的函数,如下面的程序所示。

程序

这样我们就创建了一个库。但是,我们仍然需要保存它,以便通过简单地调用它们来使用这些函数。

创建和使用我们自己的库代码

要创建库,请遵循以下说明

  • 首先,我们必须为库创建一个接口:mylib.h
  • 现在我们必须创建我们库的实现:mylib.c
  • 我们必须创建一个库 OBJ 文件(或目标文件),例如(.o),我们可以将其链接到使用该库的程序中。
  • 现在我们可以通过在程序中包含它来在其他 C 程序的代码中使用该库,例如“#include<mylib.h>”,并将库的代码链接到 a.out 文件中。

框架

框架只是提供了一个基本结构,我们可以在此基础上添加自己的代码来实现该系统的显著功能。因此,它允许我们以标准的方式创建应用程序,并且最重要的是要记住,如果我们使用框架来创建应用程序,显然框架会迫使我们以特定的标准方式工作。我们还可以学习一种创建网站和应用程序的标准方法,以便我们的应用程序和网站更加标准化。

框架中定义的函数是可重用的,这意味着如果我们想在项目中的多个不同地方使用相同的功能,我们可以使用它,而且我们也不需要创建该函数,因为框架已经为我们做了很多工作。

框架的另一个定义

简而言之,我们可以说软件框架是一种抽象,其中框架为我们提供了一种通用功能,我们可以通过编写附加代码来更改或修改它。这就是提供应用程序特定软件的方式。

示例

假设我们正在处理一个特定的框架,例如“Laravel”,它有很多功能,我们谈论一个单一函数,它只是一个Eloquent模型的使用,它为我们提供了一些可以在我们项目的任何地方使用的函数。在这种情况下,我们也不需要编写从数据库获取数据的函数,并且每当我们想获取数据时,我们只需要调用该函数。

框架可以做什么?

框架简化了创建 Web 应用程序的过程。那么它是如何做到的呢?假设一个用户正在从头开始创建 Web 应用程序,那么他会怎么做?他会创建一些空目录。在其中,他将创建一些基本文件,例如“index.html”、style.css,并且每次开始新项目时,他都必须从头开始,并且每次新项目都必须重复完全相同的过程。在这里,框架发挥了重要作用,它将为用户完成这项工作,而用户只需从他的逻辑开始,每次创建新项目时都不必从头开始。现在用户只需专注于项目的总体规划,框架为我们节省了大量时间。

库和框架之间的关键区别

库和框架之间的主要区别在于一个称为“IOC”(控制反转)的术语。这是一种关于控制流的技术区别。

假设,当我们从库中使用预定义的函数或类时,我们拥有完全的控制权,由我们选择何时何地使用库(或调用库中已有的函数或类)。而另一方面,如果我们使用框架,框架将负责控制流程。框架允许我们将代码插入到某些地方,但它会根据需要调用我们编写的代码。

让我们通过 vue.js(框架)和 jQuery(库)的例子来理解

假设我们要创建一个页面,在发生错误时,我们希望在该页面上显示与该错误相关的错误和信息。在以下示例中,我们将单击按钮并假装发生了一些错误。

使用 jQuery(库)的程序

看看我们是如何使用 jQuery 的。我们构建程序的方式是告诉程序我们想在何处调用它。我们可以这样理解:学生去大学图书馆,因为想学习,所以从书架上拿起一本书。

这里我们并不是说 jQuery 函数在调用它们时不需要某些输入。但是,jQuery 本身就是这类函数的集合。我们拥有完全的控制权。

示例 2

在下面给出的例子中,我们将做同样的工作,但这次我们将使用框架(vue.js)。

使用 vue.js(框架)的程序

在使用框架时,用户只需填写空白即可。VUE 本身是一个构造函数,具有几个特定的属性。它说明了它需要的需求,并在后端 VUE 决定何时何地需要它。VUE(一个框架)只是反转了控制,我们将我们的代码插入到 VUE 中。框架拥有控制权(负责)。

库和框架之间的一些其他基本区别

不能框架
1库是可重用函数和类的集合,开发者使用它们来执行一些常见的任务。框架基本上是一段代码,它决定了我们项目的架构或结构,并且还被添加到我们的程序中。
2在程序中使用库时,用户在使用库中的函数或类时拥有完全的控制权。在框架中,代码从不调用框架。相反,框架调用你。
3库有助于链接和绑定过程框架提供了一种标准的开发和部署应用程序的方式
4它可以无缝地集成到正在开发中的项目中。它不能无缝地集成到开发过程中。但是,我们可以从头开始新项目时使用它。
示例
jQuery 是一个 JavaScript 库,可简化 DOM 操作。
示例
AngularJS 是一个用于动态 Web 应用程序的 JavaScript 框架之一。

Software framework vs library

总结

在库和框架中编写的代码都是由他人(或其他开发者)编写的,这有助于用户以多种方式执行许多标准任务。这也不意味着用户不能创建自己的库。

当用户在他的程序中使用库时,他/她拥有完全的控制权,而另一方面,如果我们谈论使用框架的用户,则框架本身拥有完全的控制权而不是用户。或者我们可以说,如果用户使用框架而不是库,程序的控制权就会反转。

在程序中使用库时,用户可以自由地在程序中任何他想使用库的地方调用和使用。在框架的情况下,用户没有完全的自由,尽管在框架中用户需要为特定功能插入其代码。


下一主题Spring