现在可能是一个愚蠢的问题,但有时候“框架”和“API”这两个术语是可以互换使用的。我认为,“框架”更大、更通用,并包含许多API,可用于各种编程任务(例如,.NET框架)。而“API”则更小、更专业(例如,Facebook API)。有人想分享他们对此问题的看法吗?
以微软称.NET为一个“框架”,而Sun则称它们的产品为“平台”来举例,这是否也是一种商业/营销决策,即如何称呼“库集合”的问题?
现在可能是一个愚蠢的问题,但有时候“框架”和“API”这两个术语是可以互换使用的。我认为,“框架”更大、更通用,并包含许多API,可用于各种编程任务(例如,.NET框架)。而“API”则更小、更专业(例如,Facebook API)。有人想分享他们对此问题的看法吗?
以微软称.NET为一个“框架”,而Sun则称它们的产品为“平台”来举例,这是否也是一种商业/营销决策,即如何称呼“库集合”的问题?
设计模式提供以下定义:
关键在于,虽然工具包(API)可以在许多领域中很有用,但框架是为解决特定类别问题而设计的,并且可以通过创建框架的抽象类的应用程序特定子类来进行定制。
此外,可能更重要的是,“框架决定了您的应用程序的体系结构”,控制反转是框架的特征之一(请参见Martin Fowler); 代替您的应用程序调用特定的API以实现特定的行为,正是框架调用您的代码。
我一直以为框架就是整个东西,包括内部代码、API等。
实际上,API只是你想要利用框架时使用的部分。
换句话说,.NET框架包括.NET库、所有语言等。API只是调用函数的方式。
一个框架确实引入了控制反转的概念
(即整个程序的控制流不是由调用者决定,而是由框架决定)
当你提到语言框架(如Java框架或.Net框架)时,你实际上包括的不仅仅是库及其API(如果这些库提供控制反转,那么它们将更受限制,成为软件框架)。
语言框架包括开发和执行环境,这些环境将会调用你的代码(编译或执行)。
这就是为什么.Net Framework是一个"框架"。
为了强调其“平台无关”的编程语言特性,Java可能将其框架(JDK、JRE)称为“Java Platform”。
摘自关于Java技术
平台是程序运行的硬件或软件环境。(包括Microsoft Windows、Linux、Solaris OS和Mac OS)。
大多数平台可以描述为操作系统和底层硬件的组合。
Java平台不同于其他大多数平台,它是一个仅运行在其他基于硬件的平台之上的纯软件平台。Java平台有两个组成部分:
- Java虚拟机
- Java应用程序接口(API)
软件框架:是一个可重复使用的软件系统(或子系统)设计。软件框架可能包括程序、代码库、脚本语言、其他软件,以帮助开发和粘合软件项目的不同组件。框架的各个部分可以通过API公开。
根据我的经验,一个框架通常包含至少两个简单API所没有的东西:
可扩展性:您可以组合或子类化框架组件以扩展或自定义其功能。
用于代码生成、管理或与应用程序开发相关的诊断任务的工具。
框架基本上是一组类,它们抽象了开发过程并促进了代码复用。例如,您可能会拥有独立于正在构建的应用程序的数据库、会话和分页类。但是,API是源代码接口,允许不同系统的两个或多个组件进行交互。例如,将Google Maps API添加到您的网站中,您和Google是两个不同的系统,Google编写了用于将其产品整合到您的网站/应用程序中的底层接口。总之,在构建系统时使用框架,然后为其他人(如Facebook和Google)提供扩展时开发API。