我们中的许多人都没有意识到这种差异,这对于在开发过程中理解非常重要。如果被问到,这个问题的可能答案是“框架是各种库的集合”。然而,这个定义并不完全正确。 “谁调用谁”,即调用者/被调用者关系定义了这两个术语之间的区别。在框架中调用库代码的是我们的代码,调用我们代码的是框架的代码。让我们看看如何。
图书馆
库提供了一组辅助函数/对象/模块,您的应用程序代码为特定功能调用这些辅助函数/对象/模块。库通常专注于狭窄的范围(例如,字符串、IO、套接字),因此它们的 API 也往往更小并且需要更少的依赖项。它只是类定义的集合。为什么我们需要它们?原因很简单,即代码复用,使用其他开发者已经写好的代码。例如,一些库有一个名为 findLastIndex(char) 的方法来查找字符串特定字符的最后一个索引。我们可以直接调用库的 findLastIndex(charToFind)函数,将需要查找位置的字符作为参数传入函数调用中。
框架
另一方面,框架定义了开放或未实现的函数或对象,用户编写这些函数或对象来创建自定义应用程序。 (C++/ Java用户会理解这一点,因为它很像实现一个抽象函数)。因为框架本身就是一个应用程序,所以它的范围更广,几乎包括根据用户自己的需要制作用户应用程序所需的一切。维基百科说得更清楚:
“在计算机编程中,软件框架是一种抽象,其中提供通用功能的软件可以通过额外的用户编写的代码有选择地改变,从而提供特定于应用程序的软件”
因此,关键区别在于“控制反转” ,通常称为 IoC。当我们从库中调用方法时,我们处于控制之中。但是在框架中,控制是倒置的,即框架调用我们。它定义了一个骨架,其中应用程序定义了自己的功能来填充骨架。例如,在 Javascript 中,我们通常使用这个:
$(document.ready(){ // this call will be done by the jquery
// framework when document will be ready.
function() {
/* your code */ // our implementation inside the framework's function
}
});
在库中,我们通常有它的对象来调用它的函数,或者我们简单地调用它们。前任:
str = "Geeks.ForGeeks"
var pos = str.lastIndexOf("."); // simply calling function of string library
要点:
- 库:它执行一组特定且定义明确的操作。示例:网络协议、压缩、图像处理、字符串实用程序、正则表达式评估、数学等
- 框架:已知是一个框架,其中应用程序通过填写框架来定义操作的内容。框架示例:Web 应用程序系统、插件管理器、GUI 系统。该框架仅定义了概念,但应用程序进一步定义了对最终用户有用的功能。
- 控制反转:当我们从库中调用方法时,我们处于控制之中。但是在框架中,控制是倒置的,即框架调用我们。
参考:
- 视频教程