框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即MVC)为中心的库的集合,它涵盖了应用程序开发的所有领域。
框架和库之间的区别是什么?
我一直认为库是一组对象和函数,专注于解决特定的问题或应用程序开发的特定领域(即数据库访问);另一方面,框架是一个以特定方法论(即MVC)为中心的库的集合,它涵盖了应用程序开发的所有领域。
当前回答
我喜欢科恩的回答,但更专业的定义是:你的代码调用一个库。框架调用您的代码。例如,GUI框架通过事件处理程序调用代码。web框架通过请求-响应模型调用你的代码。
这也被称为控制反转——突然之间,框架决定何时以及如何执行你的代码,而不是像库那样反过来执行。这意味着框架对代码的结构也有更大的影响。
其他回答
库执行特定的、定义良好的操作。
框架是一个骨架,应用程序通过填充骨架来定义操作的“肉”。框架仍然有代码来连接各个部分,但最重要的工作是由应用程序完成的。
库的例子:网络协议、压缩、图像处理、字符串实用程序、正则表达式计算、数学。操作是独立的。
框架示例:Web应用程序系统,插件管理器,GUI系统。框架定义概念,而应用程序定义最终用户关心的基本功能。
根据Erich Gamma等人在《设计模式》一书中给出的定义:
库:构成可重用实现的一组相关过程和类; 框架:由一组具有模板方法的协作类组成的可重用规范。它设置了控制流,并允许通过在子类中重写框架类中模板方法调用的钩子方法来将框架裁剪到特定问题的流中。
特定于问题的代码可以使用库和实现框架。
什么是图书馆?
库是代码块的集合(可以是变量、函数、类、接口等形式),由开发人员构建,以简化其他发现其相关性的开发人员的软件开发过程。
什么是框架?
参考库的定义,我们可以将框架定义为一种工具,通过在受控的开发环境中为开发人员提供必要的库,帮助开发人员解决大量特定于领域的问题。
实际上,这取决于你给术语下什么定义。可能有很多不同的定义。
我认为下面的解释是基于我认为这个术语指的是什么:
确定的图书馆
确定性库保存的函数是基于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.
我认为主要的区别是框架遵循“好莱坞原则”,即。“别打给我们,我们会打给你的。”
马丁·福勒说:
库本质上是一组 你可以调用的函数 日子通常安排在课堂上。 每个调用都做一些工作并返回 控件到客户端。 框架体现了一些抽象 设计,内置了更多的行为。 为了使用它,你需要插入 你的行为变成了各种各样的地方 框架可以通过子类化或 通过插入你自己的类。的 框架的代码然后调用你的代码 在这些点上。