框架和库有什么区别?

1035

什么是框架的区别?

我认为库是一组对象和函数,专注于解决特定问题或特定应用程序开发领域(例如数据库访问);而框架则是基于特定方法论(例如MVC)的库集合,并覆盖应用程序开发的所有领域。


1
还有相关的内容:http://ux.stackexchange.com/questions/13314/pattern-library-vs-style-guide-what-are-the-differences - chharvey
1
我们需要一些功能,我们称之为库。我们需要一些功能,我们将借助框架,并且框架调用我们的代码(例如UIKit)。 - Kamleshwar
1
一个软件框架不仅仅是一个库。它还包括一种特定的设计架构,用户必须在其中工作 - 连接库中不同项目以提供特定应用类型的通用解决方案的一种方式。因此,框架具有只需要用户配置和验证预先编写的测试即可运行的优点。而仅使用库时,用户需要在实施之前设计架构并创建测试。因此,仅使用库需要更多的工作量。但是库是灵活的,潜在效率更高。 - Trunk
从技术上讲,库和框架之间没有太大的区别(例如Ext JS、Vue.js、React、Twitter Bootstrap、jQuery UI),就像模块化软件和操作系统之间的区别一样(例如Chrome浏览器和ChromeOS Linux)。 - user1742529
1
你呼叫图书馆,框架回应你。 - Ian Boyd
22个回答

0

库与框架

Martin Fowler - InversionOfControl

库和框架是针对你的代码的外部代码。它可以是文件(例如.jar),系统代码(操作系统的一部分)等。

是一组有用的代码。主要关注点是你的代码。库解决了狭窄范围的任务。例如-实用程序、排序、模块化。

your code ->(has) Library API

框架控制反转(IoC)容器[关于]是一种更高级的东西。框架解决了广泛的任务(特定领域),您将这些任务委托给框架。IoC - 您的代码依赖于框架逻辑、事件...结果框架调用您的代码。它强制您的代码遵循其规则(实现/扩展协议/接口/合同),传递lambda表达式...例如-测试、GUI、DI框架...

your code ->(has) and ->(implements) Framework API

[iOS库与框架]

[DIP vs DI vs IoC]


-1

这实际上取决于您对术语的定义。可能有很多不同的定义。

根据我对这个术语的理解,以下是一些不错的解释:

确定性库

确定性库包含基于函数输入或跨函数调用维护的状态的确定性函数。

如果将逻辑依赖注入到确定性库中,则此类逻辑必须符合具体规范,以使库的输出不受影响。

例如:碰撞检测库由于某种原因依赖于排序函数来辅助进行计算。可以通过依赖注入、编译时链接等方式配置此排序函数以进行优化,但必须始终符合相同的输入/输出映射,以使库本身保持确定性。

不确定性库

不确定性库可以通过与其他外部不确定性库通信来持有不确定性函数。

我通常将不确定性库称为服务。

例子:一个扑克牌库依赖于一个随机数生成器服务来洗牌。这可能是个不好的例子,因为出于架构目的,我们应该将这个库的不确定性方面推到外面。扑克牌库可以通过接收已经预先洗好的牌组而变得确定性和可单元测试化,现在这个库使用者的责任就是如果他们希望的话随机洗牌。

框架

框架处于确定性和不确定性库之间。

注入框架的任何逻辑在该函数实例的生命周期内必须是确定性的,但不同的功能实例可以在框架功能的分别执行时注入具有不同逻辑的函数实例。

例子:操作列表(如映射、筛选、排序、减少)的函数,它们期望接收确定性函数但可以对不同的执行注入不同的逻辑。请注意,只有在这些列表操作被公开为确定性时才存在此要求。在大多数语言中,列表操作不会有此限制。这样的框架的核心逻辑是确定性的,但允许接受不确定性逻辑,因此会出现混乱的情况,因为输出可能因框架的实现细节而大幅度变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接