40

框架和 SDK 有什么区别?以 MS 平台 SDK 和 .NET 框架为例。两者都有 API,都隐藏了它们的内部工作,并且都提供了可能无法快速/轻松访问的功能(换句话说,它们服务于现实世界的目的)。

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

谢谢!

编辑:这个问题一般适用于 SDK 和框架,而不仅仅是上面提到的两个。

4

8 回答 8

50

我只是从维基百科复制:

图书馆:

库是用于开发软件的子程序或类的集合。库包含为独立程序提供服务的代码和数据。这允许以模块化方式共享和更改代码和数据。

框架:

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

开发工具包:

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

所以:

  • 库是您的应用程序调用的代码。
  • 框架是几乎现成的应用程序或库。您只需使用框架调用的您自己的代码填充一些空白点。
  • SDK 是一个更大的概念,因为它可以包括库、框架、文档、工具等。
  • .NET 更像是一个平台,而不是一个软件框架。
于 2009-01-08T19:13:32.670 回答
19

SDK 应提供针对特定系统资源或功能进行编程的工具。不一定是框架(尽管 .NET 提供了一整套工具,例如编译器等 - 但无论如何这些工具都是必需的)。

因此,您可以开发一个仅由库组成的框架,但如果您将其称为 SDK,您将有望提供一些支持开发的东西。

于 2009-01-08T16:15:07.723 回答
11

简而言之,区别在于:

  • 您调用 SDK 函数。
  • 框架调用您的函数。

SDK 就像一个包含许多工具的工具箱,您可以选择使用哪些工具以及如何使用。你有控制权,但也有很多决定要做。那是相当低的水平。

一个框架为你做了很多决定,所以你不必重新发明轮子;这更像是一种“填空”的方法。更少的自由,但你可以节省很多时间,并且可能避免一些错误。

在 .NET 框架的特定情况下,它还指使用它运行应用程序所需的运行时文件,但这不是在编程上下文中使用这个词的方式......

于 2009-01-08T16:20:08.603 回答
2

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

如果您想在机器上运行 .NET 应用程序,Microsoft Framework 是必需的。

于 2009-01-08T16:15:42.293 回答
1

这是一个灰色地带,但框架往往是您编写代码的库,SDK 通常有额外的工具来帮助您从框架中获得更多收益。一个很好的例子是您单独安装的 .NET Framework SDK,该 SDK 具有额外的工具,例如 ildasm、cordb,它们并不是框架的真正组成部分。

于 2009-01-08T16:17:13.897 回答
1

我是Zend Framework 1.0 版本的负责人。我们经常收到评论说它不是开发人员期望的“框架”——他们说它更像是一个类库。

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

Zend Framework 被设计为松耦合,因此如果您愿意,您可以独立使用任何类。它对您的代码或数据库强加了一些约定。我们本来打算开发代码生成器,但还没有实现它们。

但我仍然觉得 Zend Framework 有资格作为一个框架,而不是一个 SDK,以另一种方式:一个框架是可扩展的。它被设计为一组面向对象的基类,预期用途是开发人员可以使用extend这些类或编写简单的插件类来添加功能。

传统的 SDK不可扩展。您只需在提供的类中调用 API 方法,它们会做它们所做的事情,然后您处理结果。任何定制都取决于您对 API 的使用以及您如何使用结果。

于 2009-01-08T18:28:29.937 回答
0

类库提供的类通常共享相同的粗略应用领域(数学、渲染),但主要是相互独立地使用。

框架提供的类共同构成了应用程序的基础,您只需扩展和充实即可。

SDK 包含使用 SDK 提供的技术所需的一切。它通常包含文档、示例和工具以及实际的核心内容,这些内容可能是框架或类库,甚至是完全不同的东西。

于 2009-01-08T18:58:25.883 回答
0

在一个比较中,您可以说:
库 -> 框架 -> SDK
框架由几个库和一些工具(编译器等)组成,并且不针对特定平台。对于一个平台,可能会开发几个框架,每个框架都有不同的用途。SDK 为您提供框架以及为特定平台开发软件所需的一切。

于 2012-10-29T07:53:02.363 回答