什么是软件框架?

时间:2010-06-03 07:55:16

标签: frameworks software-design

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

12 个答案:

答案 0 :(得分:409)

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

答案 1 :(得分:89)

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

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

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

然后,如果你使用框架,你将能够从好的,通常经过同行评审和经过良好测试的数十项工作中受益。没有数百名其他开发人员,他们可能比你更好。您可以快速构建您想要的内容,而无需花时间构建或过多地担心上面列出的基础架构项目。

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

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

答案 2 :(得分:52)

The summary at Wikipedia (Software Framework)(首先是google hit btw)解释得很清楚:

  

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

     

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

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

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

答案 3 :(得分:29)

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

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

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

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

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

答案 4 :(得分:12)

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

这个very nice article总结了一组库和一个框架之间的区别:

  

框架可以定义为一组库,上面写着“不要打电话给我们,我们会打电话给你。”

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

答案 5 :(得分:7)

一个简单的解释是:框架是一个可以构建应用程序的脚手架。

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

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

答案 6 :(得分:4)

在最低级别,框架是一个环境,您可以在其中获得一组工具

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

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

人们实际上不需要框架,只需要节省时间,而其他只是个人偏好的问题。

人们会用框架证明这一点,你不必从头开始编写代码。但这些只是让图书馆与框架混淆的人。

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

答案 7 :(得分:3)

一般情况下,框架工作是真实的或概念性结构,旨在作为建筑物的支撑或指导,将结构扩展为有用的东西......

答案 8 :(得分:2)

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

编辑: 好吧,我即将挖掘你们想要告诉我的内容;)你可能还没有注意到“跨越框架的工作......”之间的信息。 在此之前越来越深入。我试着给它一个希望你很高兴的地方:
我在这里找到的“图书馆和框架之间的区别”问题的一个很好的解释 http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

答案 9 :(得分:2)

框架为特定问题区域提供功能/解决方案 来自wiki的定义:

  

计算机中的软件框架   编程,是一种抽象   哪些通用代码提供通用   功能可以有选择性   用户代码覆盖或专门化   提供特定功能。   框架是一个特例   软件库就是这样的   包含代码的可重用抽象   在一个定义明确的应用程序中   编程接口(API),但他们   包含一些关键的区别   将它们分开的功能   普通图书馆。

答案 10 :(得分:2)

一个框架可以帮助我们使用“已经创建”,一个metaphore可以像,

认为地球物质是编程语言,

例如“相机”就是程序,你决定创建一个笔记本。您不需要每次都重新创建相机,只需使用地球框架(例如技术商店)拿相机并将其集成到笔记本中。

答案 11 :(得分:2)

除了定义之外,有时只有在你已经理解的情况下才能理解,一个例子帮助了我。

我认为在浏览.Net中的列表时,我有一丝了解;提供由提供特定功能的用户代码定制的功能的框架的示例。拿List.Sort(IComparer)。排序算法位于Sort方法中的.Net框架中,需要进行一系列比较;对象A来自对象B之前还是之后?但Sort本身并不知道如何进行比较;只有被排序的类型才知道。您无法编写可由许多用户重用的比较排序算法,并预测您要调用的所有各种类型的排序。你必须将这项工作留给用户自己。所以在这里,sort,又称框架,回调用户代码中的一个方法,这个类型被排序,以便它可以进行比较。 (或者可以使用代表;同一点。)

我做对了吗?