202

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

4

12 回答 12

434

我很晚才回答。但是,我想分享一个我今天才想到的例子。如果我告诉你剪一张尺寸为 5m x 5m 的纸,那么你肯定会那样做。但假设我让你剪 1000 张相同尺寸的纸。在这种情况下,您不会进行 1000 次测量;显然,你可以制作一个 5m x 5m 的框架,然后在它的帮助下,你可以在更短的时间内剪下 1000 张纸。因此,您所做的是创建一个可以执行特定类型任务的框架。您无需为相同类型的应用程序一次又一次地执行相同类型的任务,而是创建一个框架,将所有这些设施集中在一个漂亮的数据包中,从而为您的应用程序提供抽象,更重要的是为许多应用程序提供抽象。

于 2012-10-04T18:05:05.760 回答
93

从技术上讲,您不需要框架。如果您正在创建一个非常简单的网站(想想 1992 年的网络),您可以使用硬编码的 HTML 和一些 CSS 来完成所有工作。

如果你想制作一个现代的 web 应用程序,你实际上也不需要为此使用框架。

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

再说一次,如果你确实使用了一个框架,你将能够从数十甚至数百名其他开发人员的优秀、通常经过同行评审和经过良好测试的工作中受益,他们可能比你更好。您将可以快速构建您想要的东西,而无需花费时间构建或过多担心上面列出的基础设施项目。

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

而这样做的代价是什么?花一些时间学习框架。但是 - 正如几乎每个网络开发人员都会证明的那样 - 绝对值得花时间学习从使用您选择的任何框架中获得巨大(真正巨大)的好处。

于 2010-06-03T08:07:33.107 回答
57

Wikipedia (Software Framework) 的摘要(第一次 google hit btw)很好地解释了这一点:

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

软件框架具有将它们与库或普通用户应用程序区分开来的这些显着特征:

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

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

于 2010-06-03T08:00:36.623 回答
32

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

稍微简化一下,您可以将框架视为除了实际功能之外的完整应用程序。您插入功能和 PRESTO!你有一个应用程序。

例如,考虑一个 GUI 框架。该框架包含制作应用程序所需的一切。实际上,您通常可以用很少的源代码行轻松地创建一个最小的应用程序,它完全什么都不做——但它确实为您提供了窗口管理、子窗口管理、菜单、按钮栏等。这就是框架方面的事情。通过添加您的应用程序功能并将其“插入”到框架中的正确位置,您可以将这个只做窗口管理等的空应用程序变成一个真正的、成熟的应用程序。

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

我再次强调这是对框架的简化视图。我没有使用“控制反转”之类的可怕术语,尽管大多数框架都内置了这些可怕的概念。既然你是初学者,我想我会省去你的行话,用一个简单的比喻。

于 2010-06-04T11:38:42.497 回答
15

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

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

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

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

于 2010-06-03T09:13:56.583 回答
8

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

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

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

于 2010-06-03T08:35:32.413 回答
5

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

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

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

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

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

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

于 2010-06-03T09:00:16.820 回答
4

一般来说,框架作品是真实的或概念性的结构,旨在作为建筑的支撑或指南,将结构扩展为有用的东西......

于 2013-03-30T08:55:46.807 回答
2

框架为特定问题领域提供功能/解决方案。
来自维基的定义:

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

于 2010-06-03T08:08:29.440 回答
2

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

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

于 2010-06-03T07:57:39.917 回答
2

一个框架可以帮助我们使用“已经创建”,一个隐喻可以是,

认为地球材料是编程语言,

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

于 2010-06-03T08:15:27.407 回答
2

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

我想在 .Net 中对列表进行排序时,我有了一丝理解;提供由提供特定功能的用户代码定制的功能的框架示例。取 List.Sort(IComparer)。排序算法,驻留在.Net框架中的Sort方法中,需要做一系列的比较;对象 A 在对象 B 之前还是之后?但是 Sort 本身不知道如何进行比较;只有被排序的类型知道这一点。您无法编写一个可供许多用户重复使用的比较排序算法,并且无法预测您将被要求进行排序的所有各种类型。您必须将这部分工作留给用户自己。所以在这里,排序,也就是框架,回调用户代码中的一个方法,类型被排序,所以它可以进行比较。(或者可以使用委托;

我做对了吗?

于 2010-09-13T22:52:22.567 回答