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

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


当前回答

我会像你五岁一样解释。(没有使用编程术语。)

让我们想象一下,你不久前在你的城市开了一家汉堡店。但是作为初学者,你会觉得做汉堡太难了。你在想一种为顾客做汉堡的简单方法。 有人告诉你,如果你使用框架,你可以很容易地做bugger。你要知道有麦当劳汉堡框架和汉堡王汉堡框架。

如果你使用麦当劳汉堡框架,做巨无霸汉堡就很容易了。(但你不能做皇堡。)

如果你使用汉堡王汉堡框架,就可以很容易地做出皇堡。(但是你不能做巨无霸)

不管怎样,最后,它们都是汉堡。这里很重要的一点是,你必须遵循他们的框架规则来做汉堡。否则,你会觉得更难完成或者根本无法完成。

你也听说过有一种叫做简单汉堡-帕蒂图书馆的东西。

如果你使用这个库,你可以很容易地做出任何汉堡肉饼(X2速度)。 使用麦当劳汉堡框架还是汉堡王汉堡框架并不重要。 无论哪种方式,您仍然可以使用这个简单汉堡-帕蒂库。(即使你没有框架也可以使用这个库。)

你现在看到框架和库的区别了吗?


一旦你开始使用麦当劳汉堡框架。要切换到汉堡王的汉堡框架并不容易。既然你要把整个厨房都换了。

如果您开始使用Java Spring框架构建Web应用程序,那么稍后将很难(也许不可能)更改为Ruby on Rails框架。

但是Library,换别人会容易得多。或者你可以不用它。

其他回答

我认为你很好地阐述了其中的区别:框架提供了一个我们工作的框架……不知何故,它比简单的库更“有约束”。 框架还应该为一组库添加一致性。

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

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

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

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

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

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

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

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