类库和框架有什么区别?

16

我整天听到类库、基础类库、框架等术语...
框架和基础类库有什么区别?


2
这是一个重复的问题,请参考以下链接:https://dev59.com/FnVC5IYBdhLWcg3w51ry - Rachel
11个回答

22

类库和软件框架的区别在于,在框架中,控制流程不由用户代码决定,而是由框架决定。

这也被称为“好莱坞原则”(不要打电话给我们,我们会打电话给你)。

顺便提一下,这个主题还有一个不错的维基百科文章


13
您在编写代码时使用类库,但是您在框架中进行编码。
术语“框架”旨在唤起“处于环境中”的感觉。如果我要使用一个(有限的)比喻来说明它,我会说类库就像能够吃奶酪和喝红酒,而框架则像是到访法国;体验文化。框架是您构建程序的结构。类库是您使用的工具(可能在框架内部)。
当然,框架通常会包含类库。例如,.NET拥有大量的类库,这些类库包含在整个框架中。

+1 我喜欢那个例子!我会说框架就像是让你去旅游的机会,而你作为开发者可以“决定”去法国。类库则让你能够品尝奶酪、喝葡萄酒... - Peter Gfader

9

库:

它只是一组常规(函数式编程)或类定义(面向对象编程)。背后的原因很简单,即代码重用,即获取其他开发人员已编写的代码。这些类或例程通常定义特定领域中的具体操作。例如,有一些数学库可以让开发人员只需调用函数,而无需重新实现算法的工作方式。

框架:

在框架中,所有的控制流都已经存在,并且有一堆预定义的白点需要我们用代码填充。框架通常更复杂。它定义了一个骨架,应用程序定义自己的特性以填充骨架。这样,当适当时,框架将调用您的代码。好处是开发人员不需要担心设计是否好,只需要考虑实现特定于领域的功能。

库、框架和您的代码图像表示:

Library,Framework and your Code image relation

主要区别:

库和框架之间的关键区别是“控制反转”。 当您从库中调用方法时,您有控制权。但是对于框架,控制被反转:框架调用您。源自此处

关系:

它们都定义了API,用于程序员使用。将它们放在一起,可以将库视为应用程序的某个功能,将框架视为应用程序的骨架,将API视为将它们组合在一起的连接器。典型的开发过程通常从框架开始,并通过API填写在库中定义的函数。

源自原始回答


6
一个类库通常是一个DLL文件或一组类,你可以将其“包含”/“引用”到你的解决方案中并重复使用。
一个框架通常是针对特定上下文的重复模式/解决方案,例如GUI框架。框架往往意味着你需要按照框架设计者的要求编写某些代码片段,并将它们放入期望/正确的位置,然后就可以工作了。
例如,Spring是一个依赖注入框架。你需要按照设计者规定的格式编写XML文件,然后该框架允许你获取已组装好的类,而无需担心框架如何处理它们。
Rails是Ruby的RAD web-apps框架。你只需要编写模型、控制器和视图,就可以在不到一个小时的时间内拥有一个可用的Web应用程序。
BCL是一组类库,因此你不必在.NET中实现数据结构和常用类型,只需包含它们即可获得测试过的有效实现。
一个框架通常包含多个类库。如今这些术语的使用方式通常是模糊的,但以上内容至少代表了这些术语的更常见解释...至少是我的看法 :)

5

通常情况下,您会使用库来获取自己软件或基础设施中需要的某些功能。例如,想要打印条形码,您可能会使用一个库来完成此任务。而框架则可以抽象出一整类问题,例如编写Web应用程序的问题。为此,框架提供了包括所有功能和存根的“框架”,供您进行编程。


4

类库是一组被封装为可定义单元(例如程序集)的类。该术语不限于任何特定的语言或框架。

基础类库 (BCL) 是指预装在.NET Framework中的一组类库,这些类库被整齐地组织到命名空间中,以便您拥有一个 API 来构建自己的解决方案。

框架是一个更广泛的术语,包括类库、管理受控进程执行的虚拟机,提供运行时环境,以及其他服务,如内存管理和异常处理。有关更多信息,请参见.NET Framework


4
您调用类库的代码,而框架调用您的代码。

2
我认为这两者可以互换使用……它只是一组通用的可重复使用的代码(在你所针对的任何平台上),通常由平台提供。也许你可以认为BCL通常代表“纯粹”的(独立于供应商的)模块,而“框架”(取决于你如何使用该术语)可能包括供应商的定制模块。但这可能存在不同的解释。

1

框架是一个据称具有内聚性的类库集合。例如,Java和.NET框架由数百个类库组成。在.NET中,程序集和类库之间通常存在对应关系,但不一定如此。在Java中,命名空间和类库之间存在大致的对应关系。

尽管我从未注意到“基类库”这个短语,但我希望这样的东西包含抽象类,旨在在使用之前进行子类化。

第一段中的框架意味着库的范围内具有完整性。例如,您期望图像处理框架包含您需要操纵图像的所有内容,从文件格式解析器到内存中的图形操作。


我在很多地方看到“基类库”的字眼,比如现在在这本书中:《ASP.NET 3.5 AJAX》,第126页。 - Peter Gfader

0
一个应用程序有许多部分同时协同工作,提供不同的功能...现在必须为每个部分编写代码才能使其工作,因此应用程序框架会为您编写这些代码,以便您不必费心编写与每个功能相关的每个代码。应用程序框架使编写应用程序更加容易。
最简单的说法是,如果您正在建造一座建筑物,那么它的骨架结构、形状、支持的功能、电气和液压设计、框架等都是它的框架,现在您必须在该框架内工作,以制造您的建筑物,因此所有关于制造抗震结构或制造线性直立建筑物的担忧都已由您的框架处理。
就是这么简单。框架接管了与操作系统交互的所有复杂性,并为您简化了它们。它为您处理所有细节。显然,某些框架比其他框架做得更好。
应用程序框架和库之间的区别:您在编写代码时使用类库,但在框架内编写代码。

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