框架和库有什么区别?

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个回答

16

我会尽力以五岁孩子能理解的方式来解释(不使用任何编程术语)

假设你在城市里开了一家汉堡店,但作为初学者,你觉得制作汉堡很难。你正在想一种简单的方法来为顾客制作汉堡。 有人告诉你,如果你使用框架,你可以轻松制作汉堡,并且你知道了有麦当劳汉堡框架汉堡王汉堡框架

如果你使用麦当劳汉堡框架,那么制作巨无霸汉堡会非常容易。(但你不能制作美式烤汉堡。)

如果你使用汉堡王汉堡框架,那么制作美式烤汉堡也会非常容易。(但你不能制作巨无霸。)

总之,它们最终都是汉堡。这里重要的是,你必须遵循它们框架的规则来制作汉堡。否则,你会感到更难制作或无法制作。

你还听说过简单汉堡肉饼库这个东西。

如果你使用这个库,你可以轻松制作任何汉堡肉饼(速度是原来的两倍)。 无论你使用麦当劳汉堡框架还是汉堡王汉堡框架,都可以使用这个简单汉堡肉饼库。(甚至可以不使用框架。)

现在你看到了框架的区别了吗?


一旦你开始使用麦当劳汉堡框架,要切换到汉堡王汉堡框架就不容易了。因为你得改整个厨房。

如果你开始使用Java Spring框架构建Web应用程序,后来想要改成Ruby on Rails框架会很难(也许是不可能的)。

但是对于库来说,切换到其他库会更容易,或者你可以选择不使用它。


7

库实现了一个狭窄范围的功能,而框架则倾向于是提供更广泛功能支持的库集合。例如,库System.Drawing.dll处理绘图功能,但它只是整个.NET框架的一部分。


3
不错,一个框架可以包含库。因此,在第一种情况下它可以是一个框架,在第二种情况下它可以是一个库。这适用于许多Web框架,例如Apache Wicket,它定义了处理周期,但也提供了实现具体UI组件的大量类。 - OneWorld
我认为.NET是一个非常庞大的库。它是一个太大而不能称之为库,但仍然是一个库。框架强制执行一定的设计,决定控制流程等,几乎没有玩耍的空间。.NET本身并不会这样做。我认为.NET是一个库,而ASP.NET MVC是一个框架。但微软需要好的话语来推销。 - nawfal
@nawfal .NET有一个库。一个非常大的库。仍然被称为库。BLC(Base Class Library)更确切地说是.NET Framework的Framework Class Library,或者是.NET Core的CoreFX。然而,.NET也指的是一个平台。它被称为VES(Virtual Execution System),更确切地说是CLR(Common Language Runtime)。您将代码构建为该平台的程序集。然后它会执行您的代码。 - Theraot

6

图书馆是为了使用方便和效率。例如,Zend库可以帮助我们通过其定义良好的类和函数完成不同的任务。而框架通常强制实现一种解决方案,如MVC(模型-视图-控制器)(参考)。这是一种定义明确的任务分配系统,如MVC。模型包含数据库端,视图用于UI界面,控制器用于业务逻辑。


6
我认为库是一组实用程序,旨在实现特定目标(例如套接字、加密等)。
框架是库+运行时环境。例如,ASP.NET是一个框架:它接受HTTP请求,创建页面对象,调用生命周期事件等。 框架会处理所有这些细节,而你只需要写一点代码,在当前请求的生命周期的特定时间运行它!

5

您的解释听起来很好... 一个可以是编译并自包含的任何内容,可供其他代码重复使用,其内容没有任何限制。

框架则被期望具有一系列用于某个特定应用开发领域的工具和设施,就像您的例子中的MVC一样。


5

我认为你已经很好地概括了区别:框架提供了一个我们进行工作的框架...在某种程度上,它比简单的库更加“约束性”。
框架还应该为一组库添加一致性。


5

库 - 任何一组类或组件,可以根据客户的需要使用来完成特定任务。
框架 - 强制你遵循某些指导方针,以便“插入”到比你更大的东西中。你只需以已发布所需的方式提供适用于你的应用程序/要求的特定部分,以便“框架可以使你的生活更轻松”。


5
我不记得这个答案的来源(我猜我在互联网上的ppt中找到了它),但答案很简单。
库和框架是一组类,模块和/或代码(取决于编程语言),可用于您的应用程序,并帮助您解决特定的“问题”。
该问题可以是应用程序中的日志或调试信息,绘制图表,创建特定文件格式(html,pdf,xls),连接到数据库,创建应用程序的一部分或整个应用程序或应用于{{link1:设计模式}}的代码。 您可以拥有一个框架或库来解决所有这些问题以及更多问题,通常框架可以帮助您解决更复杂或更大的问题,但这是它们主要区别的结果,而不是两者的主要定义。 主要区别在于库和框架之间的依赖关系。换句话说,使用框架需要使用几乎所有类、模块或代码,但使用库只需在应用程序中使用一个或几个类、模块或代码即可。这意味着如果一个框架有50个类,为了在应用程序中使用该框架,您需要在代码中使用10-15个或更多的类,因为框架是这样设计的,一些类(这些类的对象)是其他框架中的方法的输入/参数。请参见.NET框架、Spring或任何MVC框架。然而,例如日志库,您可以只在代码中使用一个Log类,并帮助您解决“日志问题”。这并不意味着日志库没有更多的类在其代码中,比如处理文件、处理屏幕输出甚至数据库的类,但您从未在代码中接触/使用那些类,这就是为什么它是一个库而不是框架的原因。此外,还有更多的类别,而不仅仅是框架和库,但这是离题了。

2

什么是库?

一个库是由开发者构建的代码块集合(可以是变量、函数、类、接口等形式),旨在为其他开发者简化软件开发过程。

什么是框架?

根据库的定义,我们可以将框架定义为一种工具,它通过在受控开发环境中提供必要的库来帮助开发者解决大范围的特定领域问题。


这听起来更像某个框架提供者在推销他们的框架。按照这个定义,我看不出“框架”和“一堆库”的区别。 - aross

1
基于Erich Gamma等人在书籍设计模式中给出的定义:
  • 库:由相关过程和类组成的可重用实现;
  • 框架:由协作类和模板方法组成的可重用规范。它设置了控制流,并允许通过在子类中覆盖框架类中的模板方法调用的挂钩方法来针对特定问题定制框架。

特定于问题的代码可以使用库并实现框架。


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