框架和库之间有什么区别?

框架库有什么区别?

我一直认为图书馆是一组对象和功能,专注于解决特定问题或应用程序开发的特定领域(即数据库访问)。另一方面是一个框架,该框架是一组库的集合,这些库以特定方法(即 MVC)为中心,并且涵盖了应用程序开发的所有领域。

答案

执行特定的,定义明确的操作。

框架是框架,其中应用程序通过填写框架来定义操作的 “实质”。框架仍然具有链接各部分的代码,但是最重要的工作是由应用程序完成的。

库示例:网络协议,压缩,图像处理,字符串实用程序,正则表达式评估,数学。操作是独立的。

框架示例: Web 应用程序系统,插件管理器,GUI 系统。框架定义了概念,但是应用程序定义了最终用户关心的基本功能。

实际上,根据所使用的上下文,这些术语可能意味着许多不同的事物。

例如,在 Mac OS X 上,框架只是库,打包在一起。在捆绑软件中,您将找到一个实际的动态库(libWhatever.dylib)。裸库和 Mac 上的框架之间的区别在于,框架可以包含该库的多个不同版本。它可以包含额外的资源(图像,本地化的字符串,XML 数据文件,UI 对象等),并且除非框架公开发布,否则它通常包含使用该库所需的必要. h 文件。

因此,您将所有内容都放在一个包中,就可以在应用程序中使用该库了(没有. h 文件的 C / C ++ / Objective-C 库几乎没有用,除非您根据某些库文档自己编写它们),而不是一堆文件(Mac 包只是 Unix 级别上的目录,但是 UI 将其视为单个文件,就像您在 Java 中拥有 JAR 文件一样,当您单击它时,通常看不到除非您明确选择显示内容,否则里面没有内容。

维基百科称框架为 “流行语”。它定义了一个软件框架为

软件框架是软件系统(或子系统)的可重用设计。软件框架可以包括支持程序,代码库,脚本语言或其他软件,以帮助开发和粘合软件项目的不同组件。框架的各个部分可以通过 API 公开。

所以我想说一个图书馆就是 “一个图书馆”。它是对象 / 功能 / 方法的集合(取决于您的语言),您的应用程序 “链接” 它,因此可以使用对象 / 功能 / 方法。它基本上是一个包含可重用代码的文件,通常可以在多个应用程序之间共享(您不必一遍又一遍地编写相同的代码)。

框架可以是您在应用程序开发中使用的所有内容。它可以是一个库,许多库的集合,脚本的集合或创建应用程序所需的任何软件。框架只是一个非常模糊的术语。

这是一篇关于某些人的文章,主题为 “ 库与框架 ”。我个人认为这篇文章很有争议。他在那儿说的没错,但是,他只是选择了框架的多个定义之一,并将其与经典的库定义进行了比较。例如,他说您需要一个子分类框架。真?我可以在库中定义一个对象,可以对其进行链接,然后在代码中对其进行子类化。我看不出我该如何需要一个 “框架”。他以某种方式更确切地解释了如今如何使用术语框架。正如我之前所说,这只是个大肆宣传。一些公司只发布一个普通库(无论从什么意义上说是经典库),并称其为 “框架”,因为它听起来更花哨。

我认为主要区别在于框架遵循 “ 好莱坞原则 ”,即 “不给我们打电话,我们给您打电话”。

根据马丁 · 福勒Martin Fowler)的说法:

本质上是可以调用的一组函数,这些天通常组织成类。每个调用都会执行一些工作,并将控制权返回给客户端。

框架体现了一些抽象设计,并内置了更多行为。要使用它,您需要通过子类化或插入自己的类将行为插入框架中的各个位置。然后,框架的代码在这些位置调用您的代码。

您称库。

框架呼唤您。


図书馆助け足场が痛い多くの涙

图书馆:

它只是例程 (函数式编程)或类定义 (面向对象的编程)的集合 。背后的原因仅仅是代码重用 ,即获取其他开发人员已经编写的代码。这些类或例程通常在域特定区域中定义特定操作 。例如,有一些数学库可让开发人员仅调用函数而无需重做算法工作原理的实现。

框架:

在框架中,所有控制流都已经存在,并且我们应该在代码中填充 一堆预定义的白点 。框架通常更复杂。它定义了一个骨架,应用程序定义了自己的功能来填充骨架。这样,框架将在适当的时候调用您的代码。这样做的好处是,开发人员不必担心设计是否好,而只需要担心实现特定于领域的功能。

库,框架和您的代码图像表示形式:

库,框架和您的代码图像关系

关键区别:

库和框架之间的主要区别是“控制反转” 。当您从库中调用方法时,就处于控制之中。但是,有了框架,控件就被颠倒了: 框架调用了您资源。

关系:

他们两个都定义了 API,供程序员使用。为了将它们组合在一起,我们可以将库视为应用程序的特定功能,将框架视为应用程序的框架,而 API 是将它们组合在一起的连接器。典型的开发过程通常从框架开始,然后通过 API 填写库中定义的功能。

正如我一直描述的那样:

库是一种工具。

框架是一种生活方式。

您可以使用任何很小的部分来帮助您的库。您必须将整个项目提交到一个框架。

我喜欢科恩(Cohens)的回答,但更技术性的定义是:您的代码称为库。 框架调用您的代码 。例如,GUI 框架通过事件处理程序调用您的代码。一个 Web 框架通过一些请求 - 响应模型调用您的代码。

这也称为控制反转 - 框架突然决定了何时以及如何执行代码,而不是像库那样决定执行代码的方式。这意味着框架也将对您如何构造代码产生更大的影响。

从 Web 开发人员的角度来看:

  1. 库可以很容易地被另一个库替换。但是框架不能。

    如果您不喜欢 jquery 日期选择器库,则可以替换为其他日期选择器,例如引导日期选择器或 pickadate。

    如果您不喜欢在其上构建产品的 AngularJS,则不能仅使用任何其他框架进行替换。您必须重写整个代码库。

  2. 与框架相比,图书馆通常需要很少的学习时间。例如:underscore.js 是一个库,Ember.js 是一个框架。

我忘记了在哪里看到此定义,但我认为它非常不错。

库是您从代码中调用的模块,而框架是调用您的代码的模块。

框架可以由不同的库组成。让我们举个例子。

假设您要煮咖喱鱼。然后,您需要诸如香料和其他用途的配料。您还需要 ,这是您准备菜肴的基础(这是应用程序的数据)。所有成分统称为框架 。现在,您将一一或组合使用它们来制作咖喱鱼,这是您的最终产品 。将其与由underscore.jsbootstrap.cssbootstrap.jsfontawesomeAngularJS等组成的Web 框架进行比较。例如, Twitter Bootstrap v.35

现在,如果您仅考虑一种成分,例如说 。您不能使用任何想要的油,因为那样会破坏您的鱼(数据)。您只能使用橄榄油 。将其与underscore.js进行比较。现在,您要使用哪种品牌的油取决于您。有些菜是用美国橄榄油 (underscore.js)或印度橄榄油 (lodash.js)制成的。这只会改变您的应用程序的品味。由于它们的用途几乎相同,因此它们的使用取决于开发人员的偏好,并且很容易更换。

在此处输入图片说明


框架 :库的集合,这些库为您的应用程序提供独特的属性和行为。 (所有成分)

:一组定义明确的指令,可为数据提供独特的属性和行为。 (鱼上油)

插件 :一个实用程序库,用于库(ui-router-> AngularJS)或许多组合库(日期选择器 -> bootstrap.css + jQuery),如果没有它们,您的插件现在可以按预期工作。


PS AngularJS 是一个 MVC 框架,但一个 JavaScript 库。因为我相信 Library 扩展了本机技术(在这种情况下为 JavaScript)的默认行为。