框架和库有什么区别?
我一直认为图书馆是一组对象和功能,专注于解决特定问题或应用程序开发的特定领域(即数据库访问)。另一方面,它是一个框架,它是一组以特定方法论(即MVC)为中心的库的集合,涵盖了应用程序开发的所有领域。
框架和库有什么区别?
我一直认为图书馆是一组对象和功能,专注于解决特定问题或应用程序开发的特定领域(即数据库访问)。另一方面,它是一个框架,它是一组以特定方法论(即MVC)为中心的库的集合,涵盖了应用程序开发的所有领域。
Answers:
实际上,根据所使用的上下文,这些术语可能意味着许多不同的事物。
例如,在Mac OS X上,框架只是打包成捆的库。在捆绑软件中,您将找到一个实际的动态库(libWhatever.dylib)。裸库和Mac上的框架之间的区别在于,框架可以包含该库的多个不同版本。它可以包含额外的资源(图像,本地化的字符串,XML数据文件,UI对象等),除非框架公开发布,否则它通常包含使用该库所需的必要.h文件。
因此,您将所有内容都放在一个包中,您需要在应用程序中使用该库(没有.h文件的C / C ++ / Objective-C库几乎没有用,除非您根据某些库文档自己编写它们),而不是一堆文件来回移动(Mac软件包只是Unix级别上的目录,但是UI将其视为单个文件,就像您在Java中拥有JAR文件一样,当您单击它时,通常看不到除非您明确选择显示内容,否则内容将不会包含在内。
维基百科称框架为“流行语”。它定义了一个软件框架为
软件框架是软件系统(或子系统)的可重用设计。软件框架可以包括支持程序,代码库,脚本语言或其他软件,以帮助开发和粘合软件项目的不同组件。框架的各个部分可以通过API公开。
所以我想说一个图书馆就是“一个图书馆”。它是对象/功能/方法的集合(取决于您的语言),您的应用程序“链接”它,因此可以使用对象/功能/方法。它基本上是一个包含可重用代码的文件,通常可在多个应用程序之间共享(您不必一遍又一遍地编写相同的代码)。
框架可以是您在应用程序开发中使用的所有内容。它可以是一个库,许多库的集合,脚本的集合或创建应用程序所需的任何软件。框架只是一个非常模糊的术语。
这是一篇关于某人的文章,主题为“ 库与框架 ”。我个人认为这篇文章很有争议。他在那儿说的没错,但是,他只是选择了框架的多个定义之一,并将其与经典的库定义进行了比较。例如,他说您需要子分类的框架。真?我可以在库中定义一个对象,可以对其进行链接,然后在代码中将其子类化。我看不出我该如何需要一个“框架”。他以某种方式更确切地解释了如今如何使用术语框架。正如我之前所说,这只是个大肆宣传。一些公司只发布一个普通库(在任何意义上都是经典库),并称其为“框架”,因为听起来更花哨。
阿库进行特定,定义明确的操作。
甲框架是一个骨架,其中应用程序通过填写骨架定义的操作的“肉”。框架仍然具有链接各部分的代码,但是最重要的工作是由应用程序完成的。
库示例:网络协议,压缩,图像处理,字符串实用程序,正则表达式评估,数学。操作是独立的。
框架示例: Web应用程序系统,插件管理器,GUI系统。框架定义了概念,但是应用程序定义了最终用户关心的基本功能。
我认为主要区别在于框架遵循“ 好莱坞原则 ”,即“不给我们打电话,我们给您打电话”。
根据马丁·福勒(Martin Fowler)的说法:
一个库实际上是一组功能,您可以调用,这些天通常分为类。每个调用都会执行一些工作,并将控制权返回给客户端。
一个框架体现了一些抽象的设计,内置了更多的功能,而且为了使用它,你需要插入您的行为变成可以通过继承或者在您自己的类插入框架中的各个地方。然后,框架的代码在这些位置调用您的代码。
这仅仅是一个集合的例程(函数式编程)或类定义(面向对象编程)。背后的原因仅仅是代码重用,即获取其他开发人员已经编写的代码。这些类或例程通常在域特定区域中定义特定操作。例如,有一些数学库可让开发人员仅调用函数而无需重做算法工作原理的实现。
在框架中,所有控制流都已经存在,并且我们应该在代码中填充一堆预定义的白点。框架通常更复杂。它定义了一个骨架应用程序定义了自己的功能来填充框架。这样,框架将在适当的时候调用您的代码。这样做的好处是,开发人员不必担心设计是否好,而只需要担心实现特定于领域的功能。
库和框架之间的主要区别是“控制反转”。当您从库中调用方法时,就可以控制。但是有了框架,控件就被颠倒了:框架调用了您。资源。
两者都定义了API,供程序员使用。为了将它们组合在一起,我们可以将库视为应用程序的特定功能,将框架视为应用程序的框架,而API是将它们组合在一起的连接器。典型的开发过程通常从框架开始,然后通过API填写库中定义的功能。
我忘记了在哪里看到此定义,但我认为它非常不错。
库是您从代码中调用的模块,而框架是调用您的代码的模块。
框架可以由不同的库组成。让我们举个例子。
假设您要煮咖喱鱼。然后,您需要诸如油,香料和其他用途的配料。您还需要鱼,这是您准备菜肴的基础(这是应用程序的数据)。所有成分统称为框架。现在,您将一一或组合使用它们来制作咖喱鱼,这是您的最终产品。将其与由underscore.js,bootstrap.css,bootstrap.js,fontawesome,AngularJS等组成的Web框架进行比较。 Twitter Bootstrap v.35
现在,如果您只考虑一种成分,例如说油。您不能使用任何想要的油,因为那样会破坏您的鱼(数据)。您只能使用橄榄油。将其与underscore.js进行比较。现在,您要使用哪种品牌的油取决于您。有些菜是用美国橄榄油(underscore.js)或印度橄榄油(lodash.js)制成的。这只会改变您的应用程序的品味。由于它们的用途几乎相同,因此它们的使用取决于开发人员的偏好,并且很容易更换。
框架:库的集合,这些库为您的应用程序提供独特的属性和行为。(所有成分)
库:一组定义明确的指令,可为数据提供独特的属性和行为。(鱼上油)
插件:一个实用程序库,用于库(ui-router-> AngularJS)或许多组合库(日期选择器-> bootstrap.css + jQuery),没有它们,您的插件现在可以按预期工作。
PS AngularJS是MVC框架,但是是JavaScript库。因为我相信Library扩展了本机技术的默认行为(在这种情况下为JavaScript)。
这是Joel Spolsky撰写的一篇苦涩的文章,但在工具箱,库,框架等
库是为狭义范围的目的而实现的功能,而框架往往是为更广泛的功能提供支持的库的集合。例如,库System.Drawing.dll处理绘图功能,但仅是整个.NET框架的一部分。
我不记得这个答案的来源(我想我是在互联网上的.ppt中找到的),但是答案很简单。
库和框架是一组类,模块和/或代码(取决于编程语言),可以在您的应用程序中使用它们,并帮助您解决特定的“问题”。
该问题可能是在应用程序中记录或调试信息,绘制图表,创建特定的文件格式(html,pdf,xls),连接到数据库,创建应用程序的一部分或完整的应用程序或应用到应用程序的代码。设计模式。
您可以拥有一个框架或一个库来解决所有这些问题,而且,通常,框架可以帮助您解决更复杂或更大的问题,但是它们的主要区别在于它们的本质,而不是两者的主要定义。
库和框架之间的主要区别是它们自己的代码之间的依赖性,换句话说,要使用框架,您需要使用固件中几乎所有的类,模块或代码,但是要使用库,您可以使用一个或您自己的应用程序库中的几个类,模块或代码
这意味着,例如,如果一个框架有50个类以便在您需要使用的应用程序中使用该框架,那么说,您的代码中有10-15个或更多类,因为这是设计框架的方式,因此类(该类的对象)是框架中其他类中方法的输入/参数。请参阅.NET框架,Spring或任何MVC框架。
但是,例如,日志库,您可以在代码中使用Log类,并帮助您解决“日志记录问题”,这并不意味着日志库中的代码中没有更多的类,例如类来处理文件,处理屏幕输出甚至数据库,但是您绝不要在代码中触摸/使用该类,这就是为什么要使用库而不是使用框架的原因。
而且类别比框架和库更多,但是这不是主题。