框架和SDK有什么区别?例如,MS平台SDK和.NET框架都有API,都隐藏其内部工作方式,并且都提供可能很难快速/轻松地访问的功能(换句话说,它们具有实际用途)。
那么它们之间有什么区别呢?这主要是语义营销游戏吗,还是开发人员与软件交互的方式(反过来,开发人员可以期望软件的行为方式)存在实际的差异?一个预期比另一个更高级或更低级等等?
谢谢!
编辑:此问题适用于SDK和框架,不仅限于上述两个。
框架和SDK有什么区别?例如,MS平台SDK和.NET框架都有API,都隐藏其内部工作方式,并且都提供可能很难快速/轻松地访问的功能(换句话说,它们具有实际用途)。
那么它们之间有什么区别呢?这主要是语义营销游戏吗,还是开发人员与软件交互的方式(反过来,开发人员可以期望软件的行为方式)存在实际的差异?一个预期比另一个更高级或更低级等等?
谢谢!
编辑:此问题适用于SDK和框架,不仅限于上述两个。
我只是从维基百科复制:
库:
库是一组子程序或类,用于开发软件。库包含提供独立程序服务的代码和数据。这使得代码和数据可以以模块化的方式共享和更改。
框架:
计算机编程中的软件框架是一种抽象,其中通用功能提供的公共代码可以被用户代码提供的特定功能选择性地覆盖或专门化。框架类似于软件库,因为它们是封装在定义明确的API中的可重用的代码抽象。然而,与库不同的是,整个程序的控制流不是由调用者决定的,而是由框架决定的。这种控制反转是软件框架的显著特点。
SDK:
软件开发工具包(SDK或“devkit”)通常是一组开发工具,允许软件工程师为某个软件包、软件框架、硬件平台、计算机系统、视频游戏机、操作系统或类似平台创建应用程序。它可能是一些文件形式的应用程序编程接口,用于与特定编程语言交互,或包含用于与某个嵌入式系统通信的复杂硬件。常见工具包括在IDE中呈现的调试辅助程序和其他实用工具。SDK还经常包括示例代码和支持技术说明或其他支持文档,以帮助澄清主要参考资料中的要点。
所以:
SDK预期提供针对特定系统资源或功能的编程工具。框架不一定如此(尽管.NET提供了一整套工具,例如编译器等 - 但这些对其正常工作来说是必需的)。
因此,您可以开发仅由库组成的框架,但如果将其称为SDK,则应该提供支持开发的内容。
这是一个灰色地带,但框架通常是您编写代码的库,而SDK通常具有额外的工具,以帮助您更好地利用框架。一个很好的例子是.NET Framework SDK,您需要单独安装该SDK,该SDK具有额外的工具,例如ildasm,cordb,并不真正属于框架。
开发人员可以使用Microsoft SDK创建他们的程序。最终用户通常不需要它。
如果您想在计算机上运行.NET应用程序,则必须使用Microsoft Framework。
我曾经是Zend Framework 1.0版本的主要负责人。我们经常收到评论说它不是开发者期望中的“框架”,而更像一个类库。
他们期望的框架更像是一组必须一起使用才能工作的类。框架还可以包括一组编码约定,指导您以某种方式组织代码。此外,框架可能会对您的类和数据库实体强制使用命名约定。最后,还有代码生成工具。
Zend Framework旨在松散耦合,因此如果需要,您可以单独使用任何类。它对您的代码或数据库强加了很少的约定。我们打算开发代码生成器,但尚未实现。
但我仍然认为Zend Framework在另一方面符合框架的标准,而不是SDK:它是可扩展的。它被设计为一组面向对象的基础类,并且预期的用法是开发人员要么扩展这些类,要么编写简单的插件类来添加功能。
传统的 SDK 是无法扩展的。你只需在提供的类中调用 API 方法,它们会执行相应操作,然后你处理结果。任何定制化都在你使用 API 和如何利用结果方面进行。如之前详细回答过的,我现在要用通俗易懂的语言总结一下。假设你正在建造一座房子,那么你不必从头开始制作砖块。你可以使用现成的砖块、木板、金属棒等材料,根据需要高效地建造你的房子。但这还不足以建造你的房子,你仍然需要劳动力、建筑工人、机器、桶、锤子、水、电锯等工具。所以,现成的砖块、木板是框架和必要的物品,包括劳动力、锤子和机器等整套工具则是SDK。