框架和库之间有什么区别?
框架和库之间有什么区别?
我一直认为图书馆是一组对象和功能,专注于解决特定问题或者围绕应用程序开发的特定领域(即数据库访问);另一方面,框架是围绕特定方法(即MVC)的库的集合,涵盖了应用程序开发的所有领域。
解决方案
库执行特定的,定义明确的操作。
框架是框架,其中应用程序通过填写框架来定义操作的"实质"。框架仍然具有用于链接各部分的代码,但是最重要的工作是由应用程序完成的。
库示例:网络协议,压缩,图像处理,字符串实用程序,正则表达式求值,数学。操作是独立的。
框架示例:Web应用程序系统,插件管理器,GUI系统。框架定义了概念,但是应用程序定义了最终用户关心的基本功能。
解释对我来说听起来很不错……库可以是经过编译和自包含的任何东西,可以在其他代码中重复使用,实际上对内容没有任何限制。
另一方面,一个框架应该具有在某些特定的应用程序开发领域中使用的功能,就像示例MVC一样。
库是为狭义范围的目的而实现的功能,而框架往往是为更广泛的功能提供支持的库的集合。例如,库System.Drawing.dll处理绘图功能,但仅是整个.NET框架的一部分。
我认为我们已经很好地确定了差异:框架提供了一个框架,我们可以在其中进行工作...某种程度上,它比简单的库更具"约束力"。
该框架还应该为一组库增加一致性。
库可以用作客户端认为适合完成特定任务的任何类或者组件集。
Framework要求我们遵循某些准则,以"插入"比我们大的东西。我们仅以发布所需的方式提供特定于应用程序/需求的部分,以便"框架可以使生活变得轻松"
正如我一直描述的那样:
库是一种工具。
框架是一种生活方式。
我们可以使用任何很小的部分来帮助库。我们必须将整个项目提交到一个框架。
我认为主要区别在于框架遵循"好莱坞原则",即"不给我们打电话,我们给我们打电话"。
根据马丁·福勒(Martin Fowler)的说法:
A library is essentially a set of functions that you can call, these days usually organized into classes. Each call does some work and returns control to the client. A framework embodies some abstract design, with more behavior built in. In order to use it you need to insert your behavior into various places in the framework either by subclassing or by plugging in your own classes. The framework's code then calls your code at these points.
我忘记了在哪里看到此定义,但我认为它非常不错。
库是我们从代码中调用的模块,而框架是调用代码的模块。
我认为库是达到目标的一组实用程序(例如,套接字,加密等)。
框架是库+运行时环境。例如,ASP.NET是一个框架:它接受HTTP请求,创建页面对象,调用lyfe cicle事件等。框架完成了所有这些,我们编写了一些代码,这些代码将在以下代码的生命周期中的特定时间运行当前的请求!
无论如何,非常有趣的问题!
我是这样想的(并已被其他人合理化):
库是代码中包含的东西。框架是应用程序的容器。
我喜欢科恩(Cohens)的回答,但是更技术的定义是:代码称为库。框架调用代码。例如,GUI框架通过事件处理程序调用代码。一个Web框架通过某种请求-响应模型来调用代码。
这也称为控制反转,框架突然决定了何时以及如何执行代码,而不是像库那样决定执行代码的方式。这意味着框架也将对我们如何构造代码产生更大的影响。
实际上,根据所使用的上下文,这些术语可能意味着许多不同的事物。
例如,在Mac OS X上,框架只是打包成捆的库。在捆绑软件中,我们将找到一个实际的动态库(libWhatever.dylib)。裸库和Mac上的框架之间的区别在于,框架可以包含该库的多个不同版本。它可以包含额外的资源(图像,本地化的字符串,XML数据文件,UI对象等),除非该框架公开发布,否则它通常包含使用该库所需的必要.h文件。
因此,我们将所有东西都放在一个包中,我们需要在应用程序中使用该库(没有.h文件的C / C ++ / Objective-C库几乎没有用,除非我们根据某些库文档自己编写它们),而不是一堆文件(Mac包只是Unix级别上的目录,但是UI将其视为单个文件,就像我们在Java中拥有JAR文件一样,当我们单击它时,通常看不到里面的内容,除非我们明确选择显示内容)。
维基百科称框架为"流行语"。它定义了一个软件框架为
A software framework is a re-usable design for a software system (or subsystem). A software framework may include support programs, code libraries, a scripting language, or other software to help develop and glue together the different components of a software project. Various parts of the framework may be exposed through an API..
所以我想说一个图书馆就是"一个图书馆"。它是对象/功能/方法的集合(取决于语言),应用程序"链接"它,因此可以使用对象/功能/方法。它基本上是一个包含可重用代码的文件,通常可在多个应用程序之间共享(我们不必一遍又一遍地编写相同的代码)。
框架可以是我们在应用程序开发中使用的所有内容。它可以是一个库,许多库的集合,脚本的集合或者创建应用程序所需的任何软件。框架只是一个非常模糊的术语。
这是有关某人的文章,主题为"库与框架"。我个人认为这篇文章很有争议。他在那儿说的没错,但是,他只是选择了框架的多个定义之一,并将其与经典的库定义进行了比较。例如。他说我们需要一个子分类框架。真的吗?我可以在库中定义一个对象,可以对其进行链接,然后在代码中将其子类化。我看不出我该如何需要一个"框架"。他以某种方式更确切地解释了如今如何使用术语框架。正如我之前所说,这只是个大肆宣传。一些公司只发布一个普通库(在任何意义上都是经典库),并称其为"框架",因为它听起来更花哨。
这里链接了Joel Spolsky的一篇苦涩的文章,但包含了工具箱,库,框架等之间的良好区别。
我们称库。
框架呼唤我们。
図書館 助け 足場が痛い 多くの涙