框架与SDK的区别

45

框架和SDK有什么区别?例如,MS平台SDK和.NET框架都有API,都隐藏其内部工作方式,并且都提供可能很难快速/轻松地访问的功能(换句话说,它们具有实际用途)。

那么它们之间有什么区别呢?这主要是语义营销游戏吗,还是开发人员与软件交互的方式(反过来,开发人员可以期望软件的行为方式)存在实际的差异?一个预期比另一个更高级或更低级等等?

谢谢!

编辑:此问题适用于SDK和框架,不仅限于上述两个。

9个回答

57

我只是从维基百科复制:

库:

库是一组子程序或类,用于开发软件。库包含提供独立程序服务的代码和数据。这使得代码和数据可以以模块化的方式共享和更改。

框架:

计算机编程中的软件框架是一种抽象,其中通用功能提供的公共代码可以被用户代码提供的特定功能选择性地覆盖或专门化。框架类似于软件库,因为它们是封装在定义明确的API中的可重用的代码抽象。然而,与库不同的是,整个程序的控制流不是由调用者决定的,而是由框架决定的。这种控制反转是软件框架的显著特点。

SDK:

软件开发工具包(SDK或“devkit”)通常是一组开发工具,允许软件工程师为某个软件包、软件框架、硬件平台、计算机系统、视频游戏机、操作系统或类似平台创建应用程序。它可能是一些文件形式的应用程序编程接口,用于与特定编程语言交互,或包含用于与某个嵌入式系统通信的复杂硬件。常见工具包括在IDE中呈现的调试辅助程序和其他实用工具。SDK还经常包括示例代码和支持技术说明或其他支持文档,以帮助澄清主要参考资料中的要点。

所以:

  • 库是应用程序调用的代码。
  • 框架是一个几乎准备好的应用程序或库。您只需使用自己的代码填写一些空白处,框架就会调用这些代码。
  • SDK是一个更大的概念,它可以包括库、框架、文档、工具等。
  • .NET实际上更像是一个平台,而不是软件框架。

1
还有,与“引擎”有什么区别? - Delta
1
@Delta 引擎是一种框架,同时提供运行时环境,您的程序与之交互。我认为关键的想法是引擎正在运行,而您的代码控制或“驱动”操作。 - That Realty Programmer Guy

26

SDK预期提供针对特定系统资源或功能的编程工具。框架不一定如此(尽管.NET提供了一整套工具,例如编译器等 - 但这些对其正常工作来说是必需的)。

因此,您可以开发仅由库组成的框架,但如果将其称为SDK,则应该提供支持开发的内容。


2
那是很好的解釋。只是為了給觀眾補充一點,如果我想通過例子來幫助任何人理解,那麼: .Net框架=一組框架類庫(FCL),形成CLR.Net SDK=.Net框架+ C#和VB編譯器+ MS Build工具,用於打包開發人員編寫的代碼+調試器+VS中的IIS Express Web服務器+許多其他幫助您編寫程序的東西,對抗.Net框架類庫(FCL)以開發.Net應用程序。 - RBT
2
另一个例子:Qt框架(库)和Qt SDK(Qt框架+qmake+Qt Creator+Qt Linguist+...) - rbaleksandar
1
Short and clear! - Zhou Haibo

14
简而言之,它们的区别在于:
  • 你调用SDK函数。
  • 框架调用你的函数。
SDK就像一个工具箱,里面有很多工具供你选择和使用。你有控制权,但也需要做出很多决策。这是相对低级的。
框架为你做出很多决策,因此你不必重新发明轮子;更多的是“填空式”的方法。你的自由度较小,但可以节省大量时间,并避免一些错误。
在特定情况下,.NET框架还涉及到运行应用程序所需的运行时文件,但在编程上下文中并不是这个词的使用方式...

1
我不确定为什么这个被踩了... 到目前为止,它是最接近我对这些术语含义的理解的答案。 - Dave Sherohman
2
因为这些要点是不正确的。你调用的函数是API,而不是SDK。SDK是一个“灰色定义”的东西。它只是一个框架,带有额外的东西来帮助你。 - datWooWoo

2

这是一个灰色地带,但框架通常是您编写代码的库,而SDK通常具有额外的工具,以帮助您更好地利用框架。一个很好的例子是.NET Framework SDK,您需要单独安装该SDK,该SDK具有额外的工具,例如ildasm,cordb,并不真正属于框架。


1

开发人员可以使用Microsoft SDK创建他们的程序。最终用户通常不需要它。

如果您想在计算机上运行.NET应用程序,则必须使用Microsoft Framework。


1

我曾经是Zend Framework 1.0版本的主要负责人。我们经常收到评论说它不是开发者期望中的“框架”,而更像一个类库。

他们期望的框架更像是一组必须一起使用才能工作的类。框架还可以包括一组编码约定,指导您以某种方式组织代码。此外,框架可能会对您的类和数据库实体强制使用命名约定。最后,还有代码生成工具。

Zend Framework旨在松散耦合,因此如果需要,您可以单独使用任何类。它对您的代码或数据库强加了很少的约定。我们打算开发代码生成器,但尚未实现。

但我仍然认为Zend Framework在另一方面符合框架的标准,而不是SDK:它是可扩展的。它被设计为一组面向对象的基础类,并且预期的用法是开发人员要么扩展这些类,要么编写简单的插件类来添加功能。

传统的 SDK 是无法扩展的。你只需在提供的类中调用 API 方法,它们会执行相应操作,然后你处理结果。任何定制化都在你使用 API 和如何利用结果方面进行。

0
一个类库提供通常分享相同应用领域(数学、渲染)的类,但主要是独立使用的。
一个框架提供一组共同构成应用程序基础的类,你只需要扩展和完善它。
一个 SDK 包含你使用该技术所需的一切。通常包括文档、示例和工具,以及实际核心内容,可能是框架、类库或完全不同的内容。

0
在一个比较中,你可以这样说:
库 -> 框架 -> SDK
框架由几个库组成,加上一些工具(编译器等),不针对特定平台。对于一个平台,可能会开发出几个不同目的的框架。
SDK为您提供了针对特定平台开发软件所需的框架和其他一切。

-1

如之前详细回答过的,我现在要用通俗易懂的语言总结一下。假设你正在建造一座房子,那么你不必从头开始制作砖块。你可以使用现成的砖块、木板、金属棒等材料,根据需要高效地建造你的房子。但这还不足以建造你的房子,你仍然需要劳动力、建筑工人、机器、桶、锤子、水、电锯等工具。所以,现成的砖块、木板是框架和必要的物品,包括劳动力、锤子和机器等整套工具则是SDK。


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