框架是否允许您抽象通用代码 - 但不是以完整的方式(例如:抽象网络连接 - 但不是您对数据的实际操作),并且不解决任何特定的常见需求,而工具包具有通用解决方案问题(例如:对话框小部件)?
现实世界的例子:原型是一个“框架”,而Dojo是一个“工具包”。
所以我的问题是,将某些东西称为框架与将其称为工具包的标准是什么?
在他关于控制反转的文章中引用 Martin Folwer 的话:
控制反转是使框架与库不同的关键部分。库本质上是一组可以调用的函数,现在通常组织成类。每个调用都会做一些工作并将控制权返回给客户端。
框架体现了一些抽象设计,并内置了更多行为。为了使用它,您需要通过子类化或插入您自己的类来将您的行为插入到框架中的各个位置。然后框架的代码在这些点调用您的代码。
简而言之,最大的区别在于您的代码调用库,而框架调用您的代码。
框架对开发人员强制执行一些设计模式,并提供一些代码生成工具。这与我的第一句话很吻合,因为它以某种样式/模式生成代码。
库为您提供了您希望使用的功能。像 C 的 stdio 函数、C# 的控制台、PHP 的“内置”函数等
你可以将库视为一种 API
在我的书中,框架提供了一种结构,并鼓励或要求以某种方式使用它。如果开发人员想按照框架的方式做事,这可能会很好,因为很多事情自动化会更容易,但如果开发人员想偏离框架的意图,这可能会很糟糕。
另一方面,工具包提供了可以一起使用或单独使用的各种工具。它更灵活,但需要代表程序员付出更多努力。