框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即MVC)为中心的库的集合,它涵盖了应用程序开发的所有领域。
框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即MVC)为中心的库的集合,它涵盖了应用程序开发的所有领域。
当前回答
你的解释听起来不错。库可以是任何经过编译和自包含的东西,以便在其他代码中重用,实际上对其内容没有任何限制。
另一方面,框架应该具有一系列用于应用程序开发的特定领域的功能,就像您的示例MVC一样。
其他回答
实际上,这取决于你给术语下什么定义。可能有很多不同的定义。
我认为下面的解释是基于我认为这个术语指的是什么:
确定的图书馆
确定性库保存的函数是基于A)函数输入或b)在函数调用之间以某种方式维护的状态确定的。
如果将逻辑依赖注入确定性库,则该逻辑必须符合具体的规范,以便库的输出不受影响。
示例:一个碰撞检测库,由于某种原因依赖于排序函数来帮助这些计算。这个排序函数可以配置为优化目的(例如通过依赖注入,编译时链接等),但必须始终符合相同的输入/输出映射,以便库本身保持确定性。
非命定论的图书馆
一个非确定性库可以通过与它以某种方式访问的其他外部非确定性库通信来保存非确定性函数。
我通常将不确定性库称为服务。
示例:依赖于随机数字生成器服务来洗牌的扑克库。这可能是一个不好的例子,因为出于架构的目的,我们应该将这个库的不确定性方面推到外部。相反,通过采用预先洗牌的牌组,扑克库可以变得具有确定性和单元可测试性,现在这个库的用户有责任随机洗牌,如果他们愿意的话。
框架
框架介于确定性库和非确定性库之间。
任何依赖注入框架的逻辑在该函数实例的生命周期内都必须是确定的,但是不同逻辑的不同函数实例可以被注入到框架函数的单独执行中。
Example: Functions that operate on lists such as map, filter, sort, reduce, that expect to take in functions that are deterministic but can have varying logic for different executions. Note that this requirement only exists if these list operations advertise themselves as deterministic. In most languages, list operations wouldn't have this constraint. The core logic of such frameworks are deterministic, but are allowed to accept indeterministic logic at the risk of the user. This is generally a messy scenario to deal with, because output can vary widely due to implementation details of the framework.
图书馆是为了方便使用和提高效率。例如,您可以说Zend库通过其定义良好的类和函数帮助我们完成不同的任务。而框架通常强制以某种方式实现解决方案,如MVC(模型-视图-控制器)(引用)。它是一个定义良好的系统,用于像MVC一样分配任务。模型包含数据库端,视图用于UI接口,控制器用于业务逻辑。
什么是图书馆?
库是代码块的集合(可以是变量、函数、类、接口等形式),由开发人员构建,以简化其他发现其相关性的开发人员的软件开发过程。
什么是框架?
参考库的定义,我们可以将框架定义为一种工具,通过在受控的开发环境中为开发人员提供必要的库,帮助开发人员解决大量特定于领域的问题。
一个框架可以由不同的库组成。让我们举个例子。
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)的默认行为。
从Web开发人员的角度来看:
库可以很容易地被另一个库替换。但框架不能。 如果你不喜欢jquery日期选择器库,你可以替换为其他日期选择器,如bootstrap日期选择器或pickadate。 如果你不喜欢在AngularJS上构建你的产品,你不能用任何其他框架来替代。你必须重写你的整个代码库。 大多数情况下,与框架相比,库需要更少的学习曲线。例如:underscore.js是一个库,Ember.js是一个框架。