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

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


当前回答

库:

它只是例程(函数式编程)或类定义(面向对象编程)的集合。其背后的原因仅仅是代码重用,即获取其他开发人员已经编写的代码。类或例程通常在域特定区域定义特定操作。例如,有一些数学库可以让开发人员只调用函数,而无需重做算法如何工作的实现。

框架:

在框架中,所有的控制流都已经在那里,并且有一堆预定义的白点,我们应该用我们的代码来填充。框架通常更复杂。它定义了一个框架,应用程序在其中定义了自己的特性来填充该框架。通过这种方式,框架将在适当的时候调用您的代码。这样做的好处是,开发人员不需要担心设计是否好,而只需考虑实现特定领域的功能。

库,框架和你的代码图像表示:

KeyDifference:

库和框架之间的关键区别是“控制反转”。当您从库中调用方法时,您处于控制之中。但是对于框架,控件是反向的:框架调用您。源。

关系:

它们都定义了API,供程序员使用。为了将它们组合在一起,我们可以将库视为应用程序的某个函数,将框架视为应用程序的骨架,而API则是将它们组合在一起的连接器。典型的开发过程通常从框架开始,然后通过API填充库中定义的函数。

其他回答

库:

它只是例程(函数式编程)或类定义(面向对象编程)的集合。其背后的原因仅仅是代码重用,即获取其他开发人员已经编写的代码。类或例程通常在域特定区域定义特定操作。例如,有一些数学库可以让开发人员只调用函数,而无需重做算法如何工作的实现。

框架:

在框架中,所有的控制流都已经在那里,并且有一堆预定义的白点,我们应该用我们的代码来填充。框架通常更复杂。它定义了一个框架,应用程序在其中定义了自己的特性来填充该框架。通过这种方式,框架将在适当的时候调用您的代码。这样做的好处是,开发人员不需要担心设计是否好,而只需考虑实现特定领域的功能。

库,框架和你的代码图像表示:

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]

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

实际上,这取决于你给术语下什么定义。可能有很多不同的定义。

我认为下面的解释是基于我认为这个术语指的是什么:

确定的图书馆

确定性库保存的函数是基于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.