frameworks - 模块、库和框架之间的区别

标签 frameworks module

用流行的编程语言来说,这些术语之间有什么区别以及有哪些重叠?

我遗漏了任何相关术语吗?

最佳答案

所有这三个都提供功能。

但是,存在重要的差异。

只是相关功能的集合。不多,但也不少。库的定义特征是掌控一切,调用库。

框架的定义特征是控制反转。框架调用,而不是相反。 (这被称为好莱坞原则:“不要调用我们,我们会调用你。”)框架处于控制之中。控制流和数据流由框架管理。

你可以这样想:在这两种情况下,你都有一个应用程序,而这个应用程序有漏洞,代码被遗漏了,这些漏洞需要填补。库和库之间的区别一个框架是

  • 谁编写了应用程序,
  • 有哪些漏洞以及
  • 谁来填补漏洞。

使用库,编写应用程序,并省略无聊的细节,这些细节将由填充。

使用框架,框架编写者编写应用程序,并省略有趣的细节,这些细节由填写。

这有时可能会有点令人困惑,因为框架本身也可能包含无聊的细节,框架作者用库填充,您编写的部分可能包含无聊的细节,您用库填充,以及框架可能会提供一组捆绑库,这些库要么与框架配合良好,要么经常需要与框架结合使用。例如,您在使用 Web 框架编写 Web 应用程序时可能会使用 XML 生成器库,并且该 XML 库可能已由框架提供,甚至可能是框架的组成部分。

但这并不意味着库和框架之间没有区别。区别非常明显:控制反转就是它的全部内容。

模块的定义特征是信息隐藏。模块有一个接口(interface),它明确但抽象地指定了它提供的功能以及它所依赖的功能。 (通常称为导出导入功能。)该接口(interface)有一个实现(实际上是多个实现),从用户那里模块是一个黑盒子。

此外,库是相关功能的集合,而模块仅提供单个功能。这意味着,如果您的系统同时包含模块和库,则库通常会包含多个模块。例如,您可能有一个集合库,其中包含 List 模块、Set 模块和 Map 模块。

虽然您当然可以在没有模块系统的情况下编写模块,但理想情况下您希望您的模块可以单独编译(对于该概念甚至有意义的语言和执行环境),可以单独部署,并且您希望模块组合是安全的(即组合模块应该在运行时之前工作或触发错误,但绝不会导致运行时错误或意外行为)。为此,您需要一个模块系统,例如 Racket 的单元、Standard ML 的模块和仿函数或 Newspeak 的顶级类。

那么,让我们回顾一下:

  • :相关功能的集合
  • 框架:控制反转
  • 模块:具有显式导出和导入的抽象接口(interface),实现和接口(interface)是分离的,可以有多个实现并且实现是隐藏的

关于frameworks - 模块、库和框架之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099975/

相关文章:

c++ - Apple Mach-O 链接器错误 : Undefined symbols for architecture armv7 Google Protobuf

javascript - 使用 Node.js 导出模块时出错

perl - Perl 模块是否应该引发异常(死/呱呱)?

.net - 什么会导致程序集构建版本和运行时版本不同?

css - Zurb Foundation 3 - 全宽部分和更改最大宽度?

ios - Xcode 4/iOS - 从我的应用程序内部使用 SMTP 发送电子邮件

ios - 使用 CocoaPods 使用 QuickBox Framework 时出现编译错误

javascript - 使用导出模块将多个参数传递给 NodeJS 回调

javascript - 无法在 React 组件中导入 ES6 模块

wpf - 如何利用 Prism 创建 WPF/Silverlight 模块,同时也可以将其嵌入到非 Prism 应用程序中