框架和库有什么区别?
我一直认为库是一组对象和函数,专注于解决特定问题或应用程序开发的特定领域(即数据库访问); 另一方面,框架是一个以特定方法(即 MVC)为中心的图书馆集合,涵盖了应用程序开发的所有领域。
库执行特定的,定义明确的操作。
框架是一个框架,应用程序通过填充框架来定义操作的 “肉”。骨架仍然具有链接部件的代码,但最重要的工作是由应用程序完成的。
库的示例:网络协议,压缩,图像处理,字符串实用程序,正则表达式评估,数学。操作是独立的。
框架示例: Web 应用程序系统,插件管理器,GUI 系统。框架定义了概念,但应用程序定义了最终用户关心的基本功能。
实际上,根据使用的上下文,这些术语可能意味着很多不同的东西。
例如,在 Mac OS X 上,框架只是库,打包成一个包。在捆绑包中,您将找到一个实际的动态库(libWhatever.dylib)。裸库和 Mac 上的框架之间的区别在于框架可以包含多个不同版本的库。它可以包含额外的资源(图像,本地化字符串,XML 数据文件,UI 对象等),除非框架是公开发布的,否则它通常包含使用库所需的. h 文件。
因此,您需要在应用程序中使用库中的所有内容(C / C ++ / Objective-C 库,没有. h 文件是没用的,除非您根据一些库文档自己编写),而不是一堆文件要移动(Mac 包只是 Unix 级别的一个目录,但是 UI 将它视为单个文件,就像你在 Java 中使用 JAR 文件一样,当你点击它时,你通常看不到什么在里面,除非你明确选择显示内容)。
维基百科称框架为 “流行语”。它将软件框架定义为
软件框架是软件系统(或子系统)的可重用设计。软件框架可以包括支持程序,代码库,脚本语言或其他软件,以帮助开发和粘合软件项目的不同组件。框架的各个部分可以通过 API 公开。
所以我说一个图书馆就是那个 “图书馆”。它是对象 / 函数 / 方法的集合(取决于您的语言),并且您的应用程序 “链接” 它,因此可以使用对象 / 函数 / 方法。它基本上是一个包含可重用代码的文件,通常可以在多个应用程序之间共享(您不必一遍又一遍地编写相同的代码)。
框架可以是您在应用程序开发中使用的所有内容。它可以是库,许多库的集合,脚本集合,也可以是创建应用程序所需的任何软件。框架只是一个非常模糊的术语。
这是一篇关于 “ 图书馆与框架 ” 主题的文章。我个人认为这篇文章具有很强的争议性。他在那里说的并不错,但是,他只是挑选出框架的多个定义之一,并将其与经典的库定义进行比较。例如,他说你需要一个子分类框架。真?我可以在库中定义一个对象,我可以链接它,并在我的代码中对它进行子类化。我不知道我需要一个 “框架”。他在某种程度上解释了如何使用术语框架。正如我之前所说,这只是一个炒作的词。有些公司只发布了一个普通的库(在任何意义上都是经典库)并将其称为 “框架”,因为它听起来更加花哨。
我认为主要区别在于框架遵循 “ 好莱坞原则 ”,即 “不要打电话给我们,我们会打电话给你”。
根据Martin Fowler 的说法:
库本质上是一组可以调用的函数,这些日子通常组织成类。每个调用都会执行一些操作并将控制权返回给客户端。
框架体现了一些抽象设计,内置了更多行为。为了使用它,您需要通过子类化或插入自己的类将行为插入到框架中的各个位置。然后框架的代码在这些点上调用您的代码。