什么是软件框架?

Anx*_*ous 189 frameworks software-design

有人可以解释一下软件框架是什么吗?为什么我们需要一个框架?框架如何使编程更容易?

Neh*_*ary 413

我很晚才回答.但是,我想分享一个我今天才想到的例子.如果我告诉你要切割尺寸为5米×5米的纸张,那么你肯定会这样做.但是假设我要你切1000张相同尺寸的纸.在这种情况下,您不会进行1000次测量; 很明显,你可以制作一个5米乘5米的画框,然后在它的帮助下,你可以在更短的时间内剪下1000张纸.所以,你所做的是制作一个可以完成特定类型任务的框架.您不是为同一类型的应用程序反复执行相同类型的任务,而是创建一个框架,将所有这些工具放在一个漂亮的数据包中,从而为您的应用程序提供抽象,更重要的是为许多应用程序提供抽象.

  • 我想知道回答投票的原因.它会帮助我改进它. (27认同)
  • @NehaChoudhary,不是我,但他-1,因为你所说的是一个库,而不是一个框架,因为没有IoC. (22认同)
  • 我已经阅读了你的帖子,但你发布的内容听起来就像图书馆可以做的那样.如何解释框架和库之间的区别? (8认同)
  • 真棒.太好了 :) (4认同)
  • 很酷很容易理解...........非常感谢 (4认同)
  • 我不明白。从你的解释来看,这更像是一个图书馆,对吧​​? (2认同)

Ste*_*lim 90

从技术上讲,您不需要框架.如果你正在制作一个非常简单的网站(想想1992年的网页),你可以用硬编码的HTML和一些CSS来做这一切.

如果你想制作一个现代的webapp,你实际上也不需要使用它的框架.

您可以选择每次都自己编写所需的所有逻辑.您可以编写自己的数据持久性/存储层,或者 - 如果您太忙 - 只需为每个数据库访问编写自定义SQL.您可以编写自己的身份验证和会话处理层.和你自己的模板rending逻辑.以及您自己的异常处理逻辑.以及您自己的安全功能.和你自己的单元测试框架,以确保一切正常.你自己...... [持续了很长时间]

再说一次,如果你确实使用了一个框架,那么你将能够受益于数十个(如果不是数百个)其他开发人员的优秀,经过同行评审和经过良好测试的工作,这些开发人员可能比你更好.您可以快速构建您想要的内容,而无需花时间构建或过多地担心上面列出的基础架构项目.

您可以在更短的时间内完成更多工作,并且知道您正在使用或扩展的框架代码很可能比您自己完成的更好.

而这个成本呢?投入一些时间学习框架.但是 - 正如几乎每个网络开发人员都会证明的那样 - 通过使用你选择的任何框架来学习获得大量(真正的,巨大的)好处的时间绝对值得.

  • 为什么不把这些精力投入到开源框架中,而不是抨击自己的东西呢?"独自一人,我们可以移动岩石; 我们可以一起移动山脉 (17认同)
  • @Jefffrey"那你将如何学习?你将如何成长为一名程序员?" 学习你想要的,但如果你打算为真正的客户工作,你应该在最短的时间内提供最好的解决方案.您的"可能有错误"的代码是不可接受的. (7认同)
  • @Cmorales,如果你想学习一门编程语言或任何领域特定的问题你肯定不会有任何"真正的"客户端(你可能会有很多时间在你的手中)和*那就是为什么我建议新手不要从框架开始. (6认同)
  • @Jefffrey你在评论中没有说新手,这很一般.我同意你应该先自己学习,但是你的评论没有具体说明,而且在实际(工作)生活中,你不能使用有缺陷的代码来学习.我知道一些不使用框架的人,因为他们认为他们知道的更好......并且每个项目花费两倍的时间. (3认同)

aio*_*obe 52

维基百科(软件框架)(第一个google hit btw)的摘要解释得非常好:

计算机编程中的软件框架是一种抽象,其中提供通用功能的公共代码可以被提供特定功能的用户代码选择性地覆盖或专用.框架是软件库的一个特例,它们是包含在定义良好的应用程序编程接口(API)中的可重用的代码抽象,但它们包含一些将它们与普通库分开的关键区别特征.

软件框架具有这些区别特征,可以将它们与库或普通用户应用程序分开:

  1. 控制反转 - 在一个框架中,与库或普通用户应用程序不同,整个程序的控制流程不是由调用者决定的,而是由框架决定的.[1]
  2. 默认行为 - 框架具有默认行为.此默认行为实际上必须是一些有用的行为,而不是一系列无操作.
  3. 可扩展性 - 用户通常可以通过选择性覆盖或由提供特定功能的用户代码专门扩展框架.
  4. 不可修改的框架代码 - 通常不允许修改框架代码.用户可以扩展框架,但不能修改其代码.

您可能"需要"它,因为它可能在开发应用程序时为您提供了一个很好的快捷方式,因为它包含许多已经编写和测试过的功能.原因与我们使用软件库的原因非常相似.

  • 根据问题的类型,你答案的白色部分比灰色部分更好... (13认同)

JUS*_*ION 29

已经有很多好的答案,但让我看看我是否可以给你另一个观点.

通过相当多的简化,您可以将框架视为一个完整的应用程序,除了实际的功能.你插入功能和PRESTO!你有一个申请.

比如说,考虑一个GUI框架.该框架包含了创建应用程序所需的一切.事实上,你可以通过很少的源代码来简单地创建一个最小的应用程序,但它确实给你窗口管理,子窗口管理,菜单,按钮栏等等.这是框架方面的事情.通过添加您的应用程序功能并将其"插入"到框架中的正确位置,您可以将这个空白的应用程序变成一个真正的,完整的应用程序.

对于Web应用程序,服务器端应用程序等,有类似的框架类型.在每种情况下,框架都提供了大量繁琐,重复的代码(希望如此),同时提供实际的问题域功能.(这是理想的.实际上,当然,框架的成功是多变的.)

我再次强调,这是框架是什么的简化视图.虽然大多数框架内置了如此可怕的概念,但我并没有使用像"控制反转"之类的可怕术语.既然你是初学者,我以为我会用你的行话来饶恕你.


Oak*_*Oak 13

我不确定"框架"的定义是否明确.有时一大堆库被称为​​框架,但我认为这个词的典型用法更接近于aioobe带来的定义.

这篇非常好的文章总结了一组库和框架之间的区别:

框架可以定义为一组库,说"不要打电话给我们,我们会打电话给你".

框架如何帮助您?因为您不是从头开始编写内容,而是基本上只扩展一个给定的工作应用程序.您可以通过这种方式获得大量的工作效率 - 有时候生成的应用程序可能比您在同一时间范围内自己完成的工作要复杂得多 - 但您通常会在很大程度上进行交易.


Sek*_*hat 7

一个简单的解释是:框架是一个脚手架,您可以围绕它构建应用程序.

框架通常提供一些基本功能,您可以使用和扩展以创建更复杂的应用程序,有各种各样的框架.微软MVC框架就是一个很好的例子.它提供了使用MVC模式离开地面构建网站所需的一切,它处理Web请求,路由等.您所要做的就是实现"控制器"并提供"视图",这是MVC框架定义的两个构造.然后,MVC框架处理调用控制器并呈现视图.

也许不是最好的措辞,但我希望它有所帮助


yre*_*uta 5

在最低级别,框架是一个环境,在那里您可以使用一组工具

这些工具以库、配置文件等的形式出现。

这个所谓的“环境”为您提供了基本设置(错误报告、日志文件、语言设置等)……可以对其进行修改、扩展和构建。

人们其实不需要框架,这只是想节省时间的问题,其他人只是个人喜好的问题。

人们会证明使用框架是合理的,您不必从头开始编写代码。但那些只是人们将库与框架混淆了。

我在这里没有偏见,我现在实际上正在使用一个框架。


Oli*_*ops 2

框架具有您可能需要的一些功能。您可能需要某种具有内置排序机制的数组。或者您可能需要一个窗口来放置一些控件,所有这些控件都可以在框架中找到。这是一种围绕你自己的工作跨越框架的工作。

编辑:好吧,我正要挖掘你们试图告诉我的内容;)在这变得越来越深之前,您可能还没有注意到“跨越框架的工作......”之间的信息。我试着给它一个发言权,希望你能有礼貌:
对我在这里找到的“库和框架之间的差异”问题的一个很好的解释
http://ifacethoughts.net/2007/06/04/difference- Between-一个库和一个框架/

  • 需要明确的是:我没有投反对票。然而,您所谈论的水平比框架所关注的水平要低得多。例如,集合和排序算法更多的是标准库,而不是框架。 (4认同)