什么是框架和库的区别?
我认为库是一组对象和函数,专注于解决特定问题或特定应用程序开发领域(例如数据库访问);而框架则是基于特定方法论(例如MVC)的库集合,并覆盖应用程序开发的所有领域。
什么是框架和库的区别?
我认为库是一组对象和函数,专注于解决特定问题或特定应用程序开发领域(例如数据库访问);而框架则是基于特定方法论(例如MVC)的库集合,并覆盖应用程序开发的所有领域。
库与框架
Martin Fowler - InversionOfControl
库和框架是针对你的代码的外部代码。它可以是文件(例如.jar
),系统代码(操作系统的一部分)等。
库
是一组有用的代码。主要关注点是你的代码。库解决了狭窄范围的任务。例如-实用程序、排序、模块化。
your code ->(has) Library API
框架
或控制反转(IoC)容器
[关于]是一种更高级的东西。框架解决了广泛的任务(特定领域),您将这些任务委托给框架。IoC
- 您的代码依赖于框架逻辑、事件...结果框架调用您的代码。它强制您的代码遵循其规则(实现/扩展协议/接口/合同),传递lambda表达式...例如-测试、GUI、DI框架...
your code ->(has) and ->(implements) Framework API
这实际上取决于您对术语的定义。可能有很多不同的定义。
根据我对这个术语的理解,以下是一些不错的解释:
确定性库
确定性库包含基于函数输入或跨函数调用维护的状态的确定性函数。
如果将逻辑依赖注入到确定性库中,则此类逻辑必须符合具体规范,以使库的输出不受影响。
例如:碰撞检测库由于某种原因依赖于排序函数来辅助进行计算。可以通过依赖注入、编译时链接等方式配置此排序函数以进行优化,但必须始终符合相同的输入/输出映射,以使库本身保持确定性。
不确定性库
不确定性库可以通过与其他外部不确定性库通信来持有不确定性函数。
我通常将不确定性库称为服务。
例子:一个扑克牌库依赖于一个随机数生成器服务来洗牌。这可能是个不好的例子,因为出于架构目的,我们应该将这个库的不确定性方面推到外面。扑克牌库可以通过接收已经预先洗好的牌组而变得确定性和可单元测试化,现在这个库使用者的责任就是如果他们希望的话随机洗牌。
框架
框架处于确定性和不确定性库之间。
注入框架的任何逻辑在该函数实例的生命周期内必须是确定性的,但不同的功能实例可以在框架功能的分别执行时注入具有不同逻辑的函数实例。
例子:操作列表(如映射、筛选、排序、减少)的函数,它们期望接收确定性函数但可以对不同的执行注入不同的逻辑。请注意,只有在这些列表操作被公开为确定性时才存在此要求。在大多数语言中,列表操作不会有此限制。这样的框架的核心逻辑是确定性的,但允许接受不确定性逻辑,因此会出现混乱的情况,因为输出可能因框架的实现细节而大幅度变化。