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

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


当前回答

这是我的想法(其他人也对此进行了合理化解释):

库是包含在代码中的东西。框架是应用程序的容器。

其他回答

库执行特定的、定义良好的操作。

框架是一个骨架,应用程序通过填充骨架来定义操作的“肉”。框架仍然有代码来连接各个部分,但最重要的工作是由应用程序完成的。

库的例子:网络协议、压缩、图像处理、字符串实用程序、正则表达式计算、数学。操作是独立的。

框架示例:Web应用程序系统,插件管理器,GUI系统。框架定义概念,而应用程序定义最终用户关心的基本功能。

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

另一方面,框架应该具有一系列用于应用程序开发的特定领域的功能,就像您的示例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.

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