首页 文章

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

提问于
浏览
752

frameworklibrary 有什么区别?

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

19 回答

  • 254

    这里链接了bitter article by Joel Spolsky,但是工具箱,库,框架等之间有很好的区别

  • 199

    从Web开发人员的角度:

    • 库可以很容易地被另一个库替换 . 但框架不能 .

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

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

    • 与Frameworks相比,大多数库的学习曲线都非常少 . 例如:underscore.js是一个库,Ember.js是一个框架 .
  • 6

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

  • 37

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

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

  • 5

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

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

  • 203

    图书馆:

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

    框架:

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

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

    Library,Framework and your Code image relation

    KeyDifference:

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

    关系:

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

  • 96

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

    假设你想煮咖喱鱼 . 然后你需要像 oilspices 和其他 utilities 这样的成分 . 您还需要 fish 这是您准备菜肴的基础(这是您的申请数据) . 所有成分一起称为 framework . 现在你要逐个或组合使用它们来制作你的咖喱鱼 final product . 将其与 web framework 进行比较, web frameworkunderscore.jsbootstrap.cssbootstrap.jsfontawesomeAngularJS 等组成 . 例如, Twitter Bootstrap v.35 .

    现在,如果你只考虑一种成分,比如说 oil . 你不能使用你想要的任何油,因为它会破坏你的鱼(数据) . 你只能使用 Olive Oil . 与 underscore.js 比较 . 现在你想要用什么牌子的油取决于你 . 有些菜是用 American Olive Oil (underscore.js)或 Indian Olive Oil (lodash.js)制作的 . 这只会改变您的应用程序的味道 . 因为他们几乎服务同样的目的,它们的使用取决于开发人员的偏好,并且它们很容易更换 .

    enter image description here


    框架:为您的应用程序提供独特属性和行为的库集合 . (所有成分)库:一组定义明确的指令,为您的数据提供独特的属性和行为 . (Oil on Fish)插件:用于库(ui-router - > AngularJS)或许多库组合的实用程序构建(日期选择器 - > bootstrap.css jQuery),没有它,您的插件现在可以按预期工作 .


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

  • 5

    正如我一直描述的那样:

    图书馆是一种工具 .

    框架是一种生活方式 .

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

  • 6

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

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

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

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

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

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

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

    这是一篇关于某个人关于“Library vs. Framework ". I personally think this article is highly arguable. It's not wrong what he's saying there, however, he's just picking out one of the multiple definitions of framework and compares that to the classic definition of library. E.g. he says you need a framework for sub-classing. Really? I can have an object defined in a library, I can link against it, and sub-class it in my code. I don't see how I need a " framework " for that. In some way he rather explains how the term framework is used nowadays. It's just a hyped word, as I said before. Some companies release just a normal library (in any sense of a classical library) and call it a " framework”主题的文章,因为它听起来更加花哨 .

  • 28

    你叫图书馆 .

    框架打电话给你 .


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

  • 39

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

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

  • 4

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

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

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

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

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

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

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

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

  • 12

    我认为主要区别在于框架遵循“Hollywood principle ", i.e. "不要打电话给你” .

    根据Martin Fowler

    库本质上是一组可以调用的函数,现在通常组织成类 . 每个调用都会执行一些操作并将控制权返回给客户端 . 框架体现了一些抽象设计,内置了更多行为 . 为了使用它,您需要通过子类化或插入自己的类将行为插入到框架中的各个位置 . 然后框架的代码在这些点上调用您的代码 .

  • 10

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

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

  • 6

    库 - 可以用作客户端认为适合完成某项任务的任何类或组件集 .
    框架 - 要求您将某些指导方针变成比您更大的东西 . 您只需以发布要求的方式提供特定于您的应用程序/要求的部分,以便'the framwework can make your life easy'

  • 10

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

  • 305

    你的解释对我来说听起来不错...... library 可能是 library 对其内容没有任何限制 .

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

  • 445

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

  • 5

    library 执行特定的,定义明确的操作 .

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

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

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

相关问题