框架库有什么区别?

我一直认为库是一组对象和函数,专注于解决特定问题或应用程序开发的特定领域(即数据库访问); 另一方面,框架是一个以特定方法(即MVC)为中心的图书馆集合,涵盖了应用程序开发的所有领域。


#1楼

执行特定的,定义明确的操作。

框架是一个框架,应用程序通过填充框架来定义操作的“肉”。 骨架仍然有代码链接部件,但最重要的工作是由应用程序完成的。

库的示例:网络协议,压缩,图像处理,字符串实用程序,正则表达式评估,数学。 操作是独立的。

框架示例: Web应用程序系统,插件管理器,GUI系统。 框架定义了概念,但应用程序定义了最终用户关心的基本功能。


#2楼

你的解释对我来说听起来不错......一个可以是任何编译和自包含的东西,可以在其他代码中重复使用,其内容实际上没有任何限制。

另一方面, 框架应该具有一系列设施,可用于某些特定的应用程序开发领域,就像您的示例MVC一样。


#3楼

库实现了狭义目的的功能,而框架往往是一组库,为更广泛的功能提供支持。 例如,库System.Drawing.dll处理绘图功能,但只是整个.NET框架的一部分。


#4楼

我认为你很好地掌握了差异:框架提供了一个我们工作的框架......不知何故,它比一个简单的库更“约束”。
该框架还应该为一组库增加一致性。


#5楼

库 - 可以用作客户端认为适合完成某项任务的任何类或组件集。
框架 - 强制要求您“插入”比您更大的东西。 您只需按照公布要求的方式提供特定于您的应用/要求的作品,以便“framwework可以让您的生活变得轻松”


#6楼

正如我一直描述的那样:

图书馆是一种工具。

框架是一种生活方式。

一个库,你可以使用任何微小的部分帮助你。 您必须将整个项目提交到的框架。


#7楼

我认为主要区别在于框架遵循“ 好莱坞原则 ”,即“不要打电话给我们,我们会打电话给你”。

根据Martin Fowler的说法:

本质上是一组可以调用的函数,这些日子通常组织成类。 每个调用都会执行一些操作并将控制权返回给客户端。

框架体现了一些抽象设计,内置了更多行为。为了使用它,您需要通过子类化或插入自己的类将行为插入到框架中的各个位置。 然后框架的代码在这些点上调用您的代码。


#8楼

我忘记了我看到这个定义的地方,但我觉得它很不错。

库是您从代码中调用的模块,框架是调用代码的模块。


#9楼

我认为库是一组实现目标的实用程序(例如,套接字,加密等)。 框架是库+ RUNTIME EINVIRONNEMENT。 例如,ASP.NET是一个框架:它接受HTTP请求,创建页面对象,调用lyfeicle事件等。框架完成所有这些,你编写了一些代码,这些代码将在生命周期的特定时间运行目前的要求!

无论如何,非常令人兴奋的问题!


#10楼

这就是我对它的看法(并且已经看到其他人合理化):

库是代码中包含的内容。 框架是应用程序的容器。


#11楼

我喜欢Cohens的回答,但更技术性的定义是:你的代码调用了一个库。 框架调用您的代码 。 例如,GUI框架通过事件处理程序调用您的代码。 Web框架通过一些请求 - 响应模型调用您的代码。

这也称为控制反转 - 突然,框架决定何时以及如何执行代码而不是像库那样反过来。 这意味着框架对您构建代码的方式也会产生更大的影响。


#12楼

实际上,根据使用的上下文,这些术语可能意味着很多不同的东西。

例如,在Mac OS X上,框架只是库,打包成一个包。 在捆绑包中,您将找到一个实际的动态库(libWhatever.dylib)。 裸库和Mac上的框架之间的区别在于框架可以包含多个不同版本的库。 它可以包含额外的资源(图像,本地化字符串,XML数据文件,UI对象等),除非框架是公开发布的,否则它通常包含使用库所需的.h文件。

因此,你需要在一个包中使用你需要在你的应用程序中使用库的所有内容(没有.h文件的C / C ++ / Objective-C库是没用的,除非你根据一些库文档自己编写),而不是一堆文件要移动(Mac包只是Unix级别的一个目录,但是UI将它视为单个文件,就像你在Java中使用JAR文件一样,当你点击它时,你通常看不到什么在里面,除非你明确选择显示内容)。

维基百科称框架为“流行语”。 它将软件框架定义为

软件框架是软件系统(或子系统)的可重用设计。 软件框架可以包括支持程序,代码库,脚本语言或其他软件,以帮助开发和粘合软件项目的不同组件。 框架的各个部分可以通过API公开。

所以我说一个图书馆就是那个“图书馆”。 它是对象/函数/方法的集合(取决于您的语言),并且您的应用程序“链接”它,因此可以使用对象/函数/方法。 它基本上是一个包含可重用代码的文件,通常可以在多个应用程序之间共享(您不必一遍又一遍地编写相同的代码)。

框架可以是您在应用程序开发中使用的所有内容。 它可以是库,许多库的集合,脚本集合,或创建应用程序所需的任何软件。 框架只是一个非常模糊的术语。

这是一篇关于“ 图书馆与框架 ”主题的文章。 我个人认为这篇文章具有很强的争议性。 他在那里说的并不错,但是,他只是挑选出框架的多个定义之一,并将其​​与经典的库定义进行比较。 例如,他说你需要一个子分类框架。 真? 我可以在库中定义一个对象,我可以链接它,并在我的代码中对它进行子类化。 我不知道我需要一个“框架”。 他在某种程度上解释了如何使用术语框架。 正如我之前所说,这只是一个炒作的词。 有些公司只发布了一个普通的库(在任何意义上都是经典库)并将其称为“框架”,因为它听起来更加花哨。


#13楼

这里链接了Joel Spolsky的一篇痛苦的文章 ,但是在工具箱,库,框架等之间有很好的区别。


#14楼

图书馆:

它只是一 例程 (函数式编程)或类定义 (面向对象编程)。 背后的原因只是代码重用 ,即获取已由其他开发人员编写的代码。 类或例程通常在特定于域的区域中定义特定操作 。 例如,有一些数学库可以让开发人员只需调用函数而无需重做算法如何工作的实现。

框架:

在框架中,所有的控制流 都已存在,并且我们应该用我们的代码填写 一堆预定义的白点 。 框架通常更复杂。 它定义了一个框架,应用程序定义了自己的特征以填充框架。 通过这种方式,适当时框架将调用您的代码。 好处是开发人员不需要担心设计是否良好,而只需要实现特定于域的功能。

库,框架和您的代码图像表示:

KeyDifference:

库和框架之间的关键区别是“控制反转” 。 当您从库中调用方法时,您就可以控制它。 但是使用框架,控件被反转: 框架会调用你 。 资源。

关系:

它们都定义了API,用于程序员使用。 将这些组合在一起,我们可以将库视为应用程序的某个功能,将框架视为应用程序的框架,API是将这些组合在一起的连接器。 典型的开发过程通常从框架开始,并通过API填写库中定义的函数。


#15楼

库是为了易于使用和提高效率。例如,Zend库可以帮助我们通过定义良好的类和函数来完成不同的任务。虽然框架通常会强制实现某种解决方案,例如MVC(模型) -view-controller) (参考) 。 它是一个定义良好的系统,用于分配任务,如MVC.Model包含数据库端,视图用于UI接口,控制器用于业务逻辑。


#16楼

你叫图书馆。

框架打电话给你。


図书馆助け足场が痛い多くの涙


#17楼

从Web开发人员的角度:

  1. 图书馆可以很容易地被另一个图书馆替换。 但框架不能。

    如果您不喜欢jquery日期选择器库,则可以使用其他日期选择器替换,例如bootstrap日期选择器或pickadate。

    如果您不喜欢构建产品的AngularJS,则不能只替换任何其他框架。 您必须重写整个代码库。

  2. 与Frameworks相比,大多数库的学习曲线要​​少得多。 例如:underscore.js是一个库,Ember.js是一个框架。


#18楼

框架可以由不同的库组成。 我们来举个例子吧。

假设你想煮咖喱鱼。 然后你需要香料和其他工具等成分。 您还需要 ,这是您准备菜肴的基础(这是您的应用数据)。 所有成分一起称为框架 。 现在你将逐一或组合使用它们来制作你最终产品的鱼咖喱。 相比之下,与一个Web框架 ,其由选自underscore.js,bootstrap.css,bootstrap.js,fontawesome,AngularJS等有关示例,Twitter的引导V.35。

现在,如果你只考虑一种成分,比如说 。 你不能使用你想要的任何油,因为它会破坏你的鱼(数据)。 你只能使用橄榄油 。 将其与underscore.js进行比较。 现在你想要使用什么牌子的油取决于你。 有些菜是用美国橄榄油 (underscore.js)或印度橄榄油 (lodash.js)制作的。 这只会改变您的应用程序的味道。 由于它们的用途几乎相同,因此它们的使用取决于开发人员的偏好,并且它们易于更换。


框架 :一组库,为您的应用程序提供独特的属性和行为。 (所有成分)

:一组定义明确的指令,为数据提供独特的属性和行为。 (油炸鱼)

插件 :用于库(ui-router - > AngularJS)的实用程序构建或组合的许多库(日期选择器 - > bootstrap.css + jQuery),没有这些库,您的插件现在可以按预期工作。


PS AngularJS是一个MVC框架,但是一个JavaScript库。 因为我相信Library扩展了本机技术的默认行为(在本例中为JavaScript)。


#19楼

我不记得这个答案的来源(我想我在互联网上的.ppt中找到了它),但答案很简单。

库和框架是一组可以在应用程序中使用的类,模块和/或代码(取决于编程语言),可帮助您解决特定的“问题”。

该问题可以是在应用程序中记录或调试信息,绘制图表,创建特定文件格式(html,pdf,xls),连接到数据库,创建应用程序的一部分或完整的应用程序或应用于设计模式 。

你可以有一个框架或一个库来解决所有这些问题以及更多,通常框架可以帮助你解决更复杂或更大的问题,但这是他们主要差异的结果,而不是两者的主要定义。

图书馆和框架之间的主要区别在于他们自己的代码之间的依赖关系,或者使用框架,你需要使用几乎所有的类,模块或代码在FW中,但是使用库你可以使用一个或者您自己的应用程序中的lib中很少有类,模块或代码

这意味着,如果一个框架有,例如有50个类,以便在你需要使用的应用程序中使用该框架,那么,在代码中使用10-15个或更多类,因为这就是如何设计一个框架,一些类(该类的对象)是框架中其他类中的方法的输入/参数。 请参阅.NET框架,Spring或任何MVC框架。

但是例如一个日志库,你可以在你的代码中使用一个Log类,并帮助你解决“日志记录问题”,这并不意味着日志库在他的代码中没有更多类,比如类处理文件,处理屏幕输出,甚至数据库,但你永远不会在代码中触及/使用这些类,这就是为什么是库而不是框架的原因。

而且还有比Frameworks和Libraries更多的类别,但这不是主题。

框架和库有什么区别? [关闭]相关推荐

  1. 框架和库的区别_框架和库之间的区别

    框架和库的区别 Developers often use the terms "library" and "framework" interchangeably ...

  2. 什么是框架?框架和库有什么区别?

    PHP框架 对比于常见的术语:库 库就像是一个API,我们无需直到里面是如何操作的,我们只需要知道调用这个库 调用这个库的某些方法能够给我们想要的 就足够了. 而框架要比这个概念大一些,他是为了解决一 ...

  3. 前端框架,库,组件,插件,控件的理解

    框架就是提供了前端项目整体解决方案.库就是自己组合来实现项目. 某种层面上来说,前端库就像我平时家里的工具箱,里面有起子.锤子,我们可以通过这个工具箱来给小孩子创造玩具,我们甚至可以自己创造一些工具, ...

  4. 什么是Vue.js?||为什么要学习流行框架||框架和库的区别?||MVC和MVVM的关系图解

    什么是Vue.js? Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于W ...

  5. 值得推荐的C/C++框架和库 【强烈推荐】

    目录(?)[-] 值得学习的C语言开源项目 Libevent Memcached Redis Webbench APRApache Portable Runtime NGINX Tinyhttpd c ...

  6. 框架模式和设计模式的区别

    框架模式和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念.[7] 框架.设计模式这两个概念总容易被混淆,其实它们之间还是有区别的. 框架 ...

  7. Spring boot (6)---SpringMVC框架和spring Boot的区别

    SpringMVC框架和spring Boot的区别 1.我们知道Spring是一个一站式框架功能十分强大,就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是S ...

  8. JAVA 程序员需要用到 10 个测试框架和库

    关于 Java 程序员今年应该学习什么,例如编程语言,库和框架等,如果只能学习或提高其中一项,那必然是自动化测试技能. 测试是专业程序员区别于业余程序员的一项指标,作为专业程序员,并非必须采用 TDD ...

  9. iOS - 常用的iOS Mac框架和库以及常用的中文开发博客

    对于iOS以及Mac开发中常用到的一些框架,以及比较好的技术博客做了总结: 主要内容如下: UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关 隐藏与显示 HUD与Toast 对话框 ...

最新文章

  1. 软件测试员,你该如何快速提高自己的测试技术?
  2. 使用PHP连接LDAP服务器
  3. 【OpenMP实现】任意线程数并行化快排结合Merge排序100w--10线程下只用0.06s
  4. spring-boot注解详解(三)
  5. 电工接线模拟仿真软件_VERICUT数控加工仿真软件,最强的数控加工模拟软件,你知道么?...
  6. Cocos2d-3.x Android环境搭建
  7. 【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
  8. 中文表示什么_中文分词是个伪问题
  9. Capital Asset Pricing Model (CAPM)
  10. UE4之读取图片并纹理贴图显示
  11. 比char还小的变量
  12. dubbo服务调用为何先进入到mockClusterInvoker执行
  13. 模板引擎-2-模板引擎提供的模板语法
  14. 实际波动率与隐含波动率的计算 python
  15. linux制作U盘启动盘无法使用,完美:使用syslinux制作U盘启动盘
  16. 2022年ICASSP说话人日志(Speaker Diarization)方向论文泛读总结
  17. 理查德·费曼:发现的乐趣
  18. 开源WPF第三方库【Newbeecoder.UI】分页控件
  19. MIT Mini Cheetah–开源代码仿真环境搭建记录(Ubuntu20.04)
  20. html 限制每行字数,毕业论文每行字数的设置

热门文章

  1. 插件开发遇到的坑------final 型变量,编译过程被优化
  2. Android10.0 Binder通信原理(四)-Native-C\C++实例分析
  3. 微信小程序免费SSL证书https、TLS版本问题的解决方案
  4. 计算机软件求职信英文,计算机办公软件英文求职信
  5. Swift 反射Mirror的使用
  6. (14)Why some people find exercise harder than others
  7. NLayerAppV3-Distributed Service Layer(分布式服务层)
  8. 正负样本比率失衡SMOTE
  9. J2EE(一)——开发简单WEB服务器
  10. 程序运行时,内存占用查看