框架和库之间的区别是什么?

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


当前回答

库vs框架

Martin Fowler - InversionOfControl

库和框架是你的代码的外部代码。它可以是文件(例如。jar),系统代码(操作系统的一部分)等。

库是一组有用的代码。主要关注你的代码。库解决的任务范围很窄。例如,实用程序,排序,模块化

your code ->(has) Library API

框架或控制反转(IoC)容器[About]是更多的东西。框架解决了广泛的任务(特定于领域),你委派这个任务给框架。IoC——你的代码依赖于框架逻辑、事件…因此框架会调用你的代码。它迫使你的代码坚持它的规则(实现/扩展协议/接口/契约),传递lambdas…例如-测试,GUI, DI框架…

your code ->(has) and ->(implements) Framework API

[iOS Library vs Framework]

[DIP vs DI vs IoC]

其他回答

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

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

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

你可以有一个框架或一个库来解决所有这些问题,甚至更多,通常框架帮助你解决更复杂或更大的问题,但这只是它们主要区别的连续,而不是两者的主要定义。

库和框架之间的主要区别是它们自己的代码之间的依赖关系,换句话说,你要使用框架 需要使用FW中几乎所有的类、模块或代码 类中的一个或几个类、模块或代码 Lib在您自己的应用程序中

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

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

还有比框架和库更多的类别,但这是跑题了。

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

库可以很容易地被另一个库替换。但框架不能。 如果你不喜欢jquery日期选择器库,你可以替换为其他日期选择器,如bootstrap日期选择器或pickadate。 如果你不喜欢在AngularJS上构建你的产品,你不能用任何其他框架来替代。你必须重写你的整个代码库。 大多数情况下,与框架相比,库需要更少的学习曲线。例如:underscore.js是一个库,Ember.js是一个框架。

我喜欢科恩的回答,但更专业的定义是:你的代码调用一个库。框架调用您的代码。例如,GUI框架通过事件处理程序调用代码。web框架通过请求-响应模型调用你的代码。

这也被称为控制反转——突然之间,框架决定何时以及如何执行你的代码,而不是像库那样反过来执行。这意味着框架对代码的结构也有更大的影响。

实际上,根据使用的上下文,这些术语可以有很多不同的含义。

For example, on Mac OS X frameworks are just libraries, packed into a bundle. Within the bundle you will find an actual dynamic library (libWhatever.dylib). The difference between a bare library and the framework on Mac is that a framework can contain multiple different versions of the library. It can contain extra resources (images, localized strings, XML data files, UI objects, etc.) and unless the framework is released to public, it usually contains the necessary .h files you need to use the library.

Thus you have everything within a single package you need to use the library in your application (a C/C++/Objective-C library without .h files is pretty useless, unless you write them yourself according to some library documentation), instead of a bunch of files to move around (a Mac bundle is just a directory on the Unix level, but the UI treats it like a single file, pretty much like you have JAR files in Java and when you click it, you usually don't see what's inside, unless you explicitly select to show the content).

维基百科称框架为“流行词”。它将软件框架定义为

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

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

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

Here's an article about some guy regarding the topic "Library vs. Framework". I personally think this article is highly arguable. It's not wrong what he's saying there, however, he's just picking out one of the multiple definitions of framework and compares that to the classic definition of library. E.g. he says you need a framework for sub-classing. Really? I can have an object defined in a library, I can link against it, and sub-class it in my code. I don't see how I need a "framework" for that. In some way he rather explains how the term framework is used nowadays. It's just a hyped word, as I said before. Some companies release just a normal library (in any sense of a classical library) and call it a "framework" because it sounds more fancy.

库——任何一组类或组件,只要客户端认为合适,就可以使用它们来完成某个任务。 框架——要求你将某些指导方针“插件”到比你更大的东西中。您只需以一种已发布的必需方式提供特定于您的应用程序/需求的部分,以便“框架可以使您的生活变得轻松”。