框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即MVC)为中心的库的集合,它涵盖了应用程序开发的所有领域。
框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即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)的默认行为。
其他回答
你的解释听起来不错。库可以是任何经过编译和自包含的东西,以便在其他代码中重用,实际上对其内容没有任何限制。
另一方面,框架应该具有一系列用于应用程序开发的特定领域的功能,就像您的示例MVC一样。
正如我一直描述的那样:
图书馆是一个工具。
框架是一种生活方式。
你可以使用任何微小的部分来帮助你。一个你必须将整个项目投入其中的框架。
库执行特定的、定义良好的操作。
框架是一个骨架,应用程序通过填充骨架来定义操作的“肉”。框架仍然有代码来连接各个部分,但最重要的工作是由应用程序完成的。
库的例子:网络协议、压缩、图像处理、字符串实用程序、正则表达式计算、数学。操作是独立的。
框架示例:Web应用程序系统,插件管理器,GUI系统。框架定义概念,而应用程序定义最终用户关心的基本功能。
库:
它只是例程(函数式编程)或类定义(面向对象编程)的集合。其背后的原因仅仅是代码重用,即获取其他开发人员已经编写的代码。类或例程通常在域特定区域定义特定操作。例如,有一些数学库可以让开发人员只调用函数,而无需重做算法如何工作的实现。
框架:
在框架中,所有的控制流都已经在那里,并且有一堆预定义的白点,我们应该用我们的代码来填充。框架通常更复杂。它定义了一个框架,应用程序在其中定义了自己的特性来填充该框架。通过这种方式,框架将在适当的时候调用您的代码。这样做的好处是,开发人员不需要担心设计是否好,而只需考虑实现特定领域的功能。
库,框架和你的代码图像表示:
KeyDifference:
库和框架之间的关键区别是“控制反转”。当您从库中调用方法时,您处于控制之中。但是对于框架,控件是反向的:框架调用您。源。
关系:
它们都定义了API,供程序员使用。为了将它们组合在一起,我们可以将库视为应用程序的某个函数,将框架视为应用程序的骨架,而API则是将它们组合在一起的连接器。典型的开发过程通常从框架开始,然后通过API填充库中定义的函数。
库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]