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

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


当前回答

我忘记在哪里看到这个定义了,但我觉得它很好。

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

其他回答

根据Erich Gamma等人在《设计模式》一书中给出的定义:

库:构成可重用实现的一组相关过程和类; 框架:由一组具有模板方法的协作类组成的可重用规范。它设置了控制流,并允许通过在子类中重写框架类中模板方法调用的钩子方法来将框架裁剪到特定问题的流中。

特定于问题的代码可以使用库和实现框架。

你的解释听起来不错。库可以是任何经过编译和自包含的东西,以便在其他代码中重用,实际上对其内容没有任何限制。

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

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

Let's say you want to cook a fish curry. Then you need ingredients like oil, spices and other utilities. You also need fish which is your base to prepare your dish on (This is data of your application). all ingredients together called a framework. Now you gonna use them one by one or in combination to make your fish curry which is your final product. Compare that with a web framework which is made out of underscore.js, bootstrap.css, bootstrap.js, fontawesome, AngularJS etc. For an example, Twitter Bootstrap v.35.

Now, if you consider only one ingredient, like say oil. You can't use any oil you want because then it will ruin your fish (data). You can only use Olive Oil. Compare that with underscore.js. Now what brand of oil you want to use is up to you. Some dish was made with American Olive Oil (underscore.js) or Indian Olive Oil (lodash.js). This will only change the taste of your application. Since they serve almost the same purpose, their use depends on the developer's preference and they are easily replaceable.


框架:为应用程序提供独特属性和行为的库的集合。(所有材料) 库:一组定义良好的指令,为数据提供独特的属性和行为。(鱼身上的油) 插件:一个库(ui-router -> AngularJS)或多个库的组合(date-picker -> bootstrap.css + jQuery)的工具构建,如果没有它,你的插件现在可能会正常工作。


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

我认为主要的区别是框架遵循“好莱坞原则”,即。“别打给我们,我们会打给你的。”

马丁·福勒说:

库本质上是一组 你可以调用的函数 日子通常安排在课堂上。 每个调用都做一些工作并返回 控件到客户端。 框架体现了一些抽象 设计,内置了更多的行为。 为了使用它,你需要插入 你的行为变成了各种各样的地方 框架可以通过子类化或 通过插入你自己的类。的 框架的代码然后调用你的代码 在这些点上。

库实现功能的目的很窄,而框架往往是库的集合,为更广泛的特性提供支持。例如,库System.Drawing.dll处理绘图功能,但它只是整个. net框架的一部分。