框架、工具包和库之间的区别是什么?
当前回答
图
如果你是一个视觉学习者,下面的图表会让你更清楚:
(学分:http://tom.lokhorst.eu/2010/09/why-libraries-are-better-than-frameworks)
其他回答
非常非常相似,框架通常比库更完善和完整,而工具包可以简单地是类似库和框架的集合。
这是一个非常好的问题,在本质上可能有一点点主观,但我相信这是我能给出的最好的答案。
图书馆
我认为库是已经编码的代码,您可以使用它,从而不必再次编码,这是一致的。代码的组织方式必须允许您查找所需的功能并从自己的代码中使用它。
大多数编程语言都带有标准库,特别是一些实现某种集合的代码。这是为了方便您不必自己编写这些代码。类似地,大多数编程语言都有构造,允许您从库中查找功能,例如动态链接、名称空间等。
因此,发现自己经常需要重用的代码是放入库中的好代码。
工具包
工具:用于特定目的的一套工具这是一致的。问题是,什么被认为是工具,什么不是。我想说没有固定的定义,它取决于自称为工具包的东西的上下文。工具的例子可以是库、小部件、脚本、程序、编辑器、文档、服务器、调试器等。
另一个需要注意的是“特殊目的”。这总是正确的,但是目的的范围很容易根据工具包的制作者而改变。所以它可以是程序员的工具箱,也可以是字符串解析工具箱。一个是如此广泛,它可以有工具触及所有编程相关的,而另一个是更精确。
sdk通常是工具包,因为它们尝试将一组工具(通常是多种类型的)捆绑到一个包中。
我认为常见的思路是,工具为您做了一些事情,要么是完全的,要么是帮助您做这些事情。工具箱只是一组工具,它们都执行或帮助您执行一组特定的活动。
框架
框架的定义并不一致。对于任何可以构建代码框架的东西,这似乎是一个通用术语。这意味着:任何构建或支持代码的结构。
这意味着您根据框架构建代码,而根据代码构建库。
But, it seems that sometimes the word framework is used in the same sense as toolkit or even library. The .Net Framework is mostly a toolkit, because it's composed of the FCL which is a library, and the CLR, which is a virtual machine. So you would consider it a toolkit to C# development on Windows. Mono being a toolkit for C# development on Linux. Yet they called it a framework. It makes sense to think of it this way too, since it kinds of frame your code, but a frame should more support and hold things together, then do any kind of work, so my opinion is this is not the way you should use the word.
我认为这个行业正试图将框架转变为一个已经编写好的程序,其中缺少你必须提供或定制的部分。我认为这是一件好事,因为工具箱和库是“框架”其他用法的非常精确的术语。
图
如果你是一个视觉学习者,下面的图表会让你更清楚:
(学分:http://tom.lokhorst.eu/2010/09/why-libraries-are-better-than-frameworks)
关于Mittag的正确答案:
一个简单的例子。假设您在一个类中实现了ISerializable接口(. net)。你利用了。net的框架特性,而不是库特性。你填上“白点”(就像mittag说的),你就完成了骨架。你必须事先知道框架将如何“反应”你的代码。实际上。net是一个框架,这就是我不同意Mittag观点的地方。
你的问题的完整的答案在本书的第19章(整个章节都是关于这个主题的)中给出了,顺便说一下,这是一本非常好的书(完全不是“只是为了Smalltalk”)。
我认为这有点主观。工具箱是最简单的。它只是一堆可以使用的方法和类。 库和框架的区别在于如何使用它们。很久以前,我在某个地方读到一个完美的答案。框架调用您的代码,但另一方面,您的代码调用库。