之间的区别是什么一个 框架 和一个 图书馆?

我总是想过一个图书馆作为设定对象和功能,侧重于解决一个特定问题或特定地区的应用发展(即数据库入);和一个框架,另一方面作为一个集合的库集中在一个特定的方法(即视)及其复盖的所有领域的应用程序开发。

有帮助吗?

解决方案

实际上这些条款可能意味着很多不同的事情取决的上下文中使用它们。

例如,在Mac OS X框架只是图书馆、包装到一束。在捆绑,你将找到一个实际的动态图书馆(libWhatever.dylib).之间的差异的一个裸库和框架,Mac,是这一框架可以包含多个不同版本的图书馆。它可以包含额外的资源(图像,本地化串、XML数据文件,用户界面对象,等等。) 并且,除非该框架是发放给公众,它通常包含所有必要的。h文件需要使用的图书馆。

因此,你拥有的一切在一个包你需要使用的图书馆在应用程序(a C/C++/目标-C库。h文件是很无用的,除非你写他们自己根据一些图书馆的文件),而不是一大堆的文件,以移动(Mac束仅仅是一个目录上的Unix水平,但UI对待它就像一个单一的文件,很像你有罐子文件在爪哇和当你点击,你通常看不到里面有什么,除非明确选择显示的内容)。

维基百科的电话框架的一个"流行词".它定义了一个框架,作为软件

一个软件框架是一个重用的 设计的软件系统(或 子系统)。一个软件框架可以 包括支持项目,代码 图书馆、一个脚本语言,或 其他的软件,以帮助发展和 粘合在一起的不同成分 一个软件项目。各种零件 该框架的可能暴露 通过API..

所以我要说一个图书馆只是说,"一个图书馆"。这是一个收集对象/职能/方法(这取决于你的语言)和应用程序"链接"反对,因此可以使用的对象/职能/方法。它基本上是一个文件含有重复使用的代码,通常可以分享多个应用程序之间(你没有写入相同的代码多次).

一框架可以一切都使用中的应用程序开发。它可以是一个图书馆,收集的许多图书馆,收藏的剧本,或任何的软件你需要为你的申请。框架仅仅是一个非常模糊的术语。

这是一个条约的某些人关于主题"图书馆与框架".我个人认为这篇文章是非常可争辩的.这不是错误的他在说什么存在,但是,他只是挑出一个定义的框架和比较经典的定义的图书馆。E.g。他说你需要一个框架子分级.真的吗?我可以有一个对象限定在一个图书馆,我可以链接,和子类,它在我的代码。我不怎么看我需要一个"框架"。在一些办法,他而说明如何术语的框架,用于今天。这只是一个宣传字,因为我之前所说的。一些公司发布仅仅是一个正常的库(在任何意义上的一个经典的图书馆),并呼吁它的一个"框架",因为它听起来更花哨。

其他提示

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

框架是一个框架,应用程序在其中定义“肉”框架。填写骨架的操作骨架仍然有代码链接部件,但最重要的工作是由应用程序完成的。

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

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

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

根据 Martin Fowler

  

本质上是一组   你可以调用的函数,这些   通常组织成课程的日子。   每次通话都会做一些工作并返回   控制客户。

     

框架体现了一些抽象   设计,内置更多行为。   为了使用它你需要插入   你的行为进入了各个地方   框架要么通过子类化,要么通过子类化   通过插入自己的类。该   框架的代码然后调用您的代码   在这些方面。

库:

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

框架:

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

图书馆,框架和您的代码图像表示:

KeyDifference:

库和框架之间的主要区别是 “控制反转” 。当您从库中调用方法时,您就可以控制它。但是使用框架,控件反转:框架调用你来源。

关系:

它们都定义了API,用于程序员使用。将这些组合在一起,我们可以将库视为应用程序的某个功能,将框架视为应用程序的框架,API是将这些组合在一起的连接器。典型的开发过程通常从框架开始,并通过API填写库中定义的函数。

你打电话给图书馆。

框架会给你打电话。


  

図書館 助け结果   足場が痛い结果   多くの涙

正如我一直描述的那样:

图书馆是一种工具。

框架是一种生活方式。

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

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

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

从网页开发人员的观点:

  1. 库可以很容易地更换的通过另一个图书馆。但是框架。

    如果你不喜欢jquery的日期选择器的图书馆,你可以替换其它的日期选择器,如引导的日期选择器或pickadate.

    如果你不喜欢的内容在其上建立自己的产品,不能只是取代任何其他框架。你要重写你的整个码的基础。

  2. 大多图书馆需要很少的学习曲线相比,框架。例如:underscore.js 是图书馆Ember.js 是一个框架。

我忘记了我看到这个定义的地方,但我认为这很不错。

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

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

假设你想煮咖喱鱼。然后你需要像香料和其他实用程序这样的成分。您还需要 fish ,这是您准备菜肴的基础(这是您申请的数据)。所有成分一起称为 框架 。现在,您将逐一或组合使用它们来制作您的 最终产品 的鱼咖喱。将其与网络框架进行比较,后者由 underscore.js bootstrap.css bootstrap.js 组成, fontawesome AngularJS 等。例如, Twitter Bootstrap v.35

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


  

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

     

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

     

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


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

这就是我对它的看法(并且已经看到其他人合理化了):

库是代码中包含的内容。框架是应用程序的容器。

这里链接了一个 Joel Spolsky的苦涩文章,但包含工具箱,库,框架等之间的区别很好

库实现了狭义目的的功能,而框架往往是一组库,为更广泛的功能提供支持。例如,库System.Drawing.dll处理绘图功能,但只是整个.NET框架的一部分。

库 - 可以用作客户端认为适合完成某项任务的任何类或组件集 框架 - 要求您使用“插件”的某些指导原则。变成比你大的东西。您只需按照公布要求的方式提供特定于您的申请/要求的作品,以便“framwework可以让您的生活变得轻松”

库是为了易于使用和提高效率。例如,Zend库可以帮助我们通过定义良好的类和函数来完成不同的任务。虽然框架通常会强制某种方式实现解决方案,例如MVC(模型 - 视图 - 控制器)(参考)。它是一个定义良好的系统,用于分配任务,如MVC.Model包含数据库端,视图用于UI接口,控制器用于业务逻辑。

我认为你很好地确定了差异:框架提供了我们工作的框架......不知何故,它更加“约束”了。而不是一个简单的图书馆。
该框架还应该为一组库增加一致性。

我认为库是一组实现目标的实用程序(例如,套接字,加密等)。 框架是库+ RUNTIME EINVIRONNEMENT。例如,ASP.NET是一个框架:它接受HTTP请求,创建页面对象,调用lyfe cicle事件等。框架完成所有这些,你编写了一些代码,这些代码将在生命周期的特定时间运行目前的要求!

无论如何,这是一个非常令人兴奋的问题!

我不记得这个答案的来源(我想我在互联网上的.ppt中找到了它),但答案很简单。

库和框架是一组类,模块和/或代码(取决于编程语言),可以在您的应用程序中使用,并帮助您解决特定的“问题”。

该问题可以是在应用程序中记录或调试信息,绘制图表,创建特定文件格式(html,pdf,xls),连接到数据库,创建应用程序的一部分或完整的应用程序或代码适用于设计模式

你可以有一个框架或一个库来解决所有这些问题以及更多,通常框架可以帮助你解决更复杂或更大的问题,但这是他们主要差异的结果,而不是主要的定义两者。

  

图书馆和框架之间的主要区别在于他们自己的代码之间的依赖关系,用oder字来表示使用框架你   需要使用FW中的几乎所有类,模块或代码,但要使用   使用库,您可以使用一个或几个类,模块或代码   lib在您自己的应用程序中

这意味着如果一个框架有,例如有50个类,以便在你需要使用的应用程序中使用该框架,那么,在你的代码中说10-15个或更多的类,因为这是如何设计的框架,一些类(该类的对象)是框架中其他类中的方法的输入/参数。请参阅.NET框架,Spring或任何MVC框架。

但是例如一个日志库,您可以在代码中使用Log类,并帮助您解决“日志记录问题”,这并不意味着日志库没有更多的类在他的代码中,像处理文件的类,处理屏幕输出,甚至是数据库,但是你从不在代码中触摸/使用那些类,这就是为什么是库而不是框架的原因。

此外,还有比Frameworks和Libraries更多的类别,但这不是主题。

你的解释对我来说听起来不错......一个可以是任何编译和自包含的东西,可以在其他代码中重复使用,其内容实际上没有任何限制。

另一方面,框架应该具有一系列设施,可用于某些特定的应用程序开发领域,就像您的示例MVC一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top