什么是软件框架?

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

我很迟才回答。 但是,我想分享一个我今天只想到的例子。 如果我告诉你要裁剪一张尺寸为5米乘5米的纸,那么你肯定会这样做的。 但是,假设我要求你裁切1000张相同尺寸的纸张。 在这种情况下,你不会做1000次的测量。 显然,你可以制作一个5米×5米的框架,然后借助它,你可以在较短的时间内裁剪1000张纸。 所以,你做的是做一个框架,将做一个特定types的任务。 不是一次又一次地为相同types的应用程序执行相同types的任务,而是创build一个框架,将所有这些工具集中在一个很好的数据包中,从而为您的应用程序提供抽象,更重要的是为许多应用程序提供抽象。

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

如果你想做一个现代的webapp,你实际上也不需要使用框架。

您可以select每次都写自己需要的所有逻辑。 您可以编写自己的数据持久性/存储层,或者 – 如果您太忙,只需为每个数据库访问编写自定义SQL。 您可以编写自己的身份validation和会话处理层。 而你自己的模板渲染逻辑。 还有你自己的exception处理逻辑。 和你自己的安全function。 和你自己的unit testing框架,以确保一切正常。 而你自己… [继续相当长的时间]

再次,如果你使用的是框架 ,那么你可以从好几十个甚至几百个其他的开发者那里得到好的,通常是同行评审和非常好的testing工作,这些开发者可能比你更好。 您可以快速构build自己想要的内容,而无需花费大量时间来构build或担心上面列出的基础架构项目。

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

而这个成本呢? 投入一些时间学习框架。 但是 – 几乎每个Web开发者都会certificate – 使用任何你select的框架来学习获得巨大的(真正的,巨大的)好处是绝对值得的。

维基百科(软件框架) (第一个谷歌命中btw) 总结解释得相当不错:

计算机编程中的软件框架是一种抽象,其中提供通用function的通用代码可以被用户代码select性地覆盖或专门化,从而提供特定的function。 框架是软件库的一个特例,它们是可重复使用的抽象的代码,包装在定义良好的应用程序编程接口(API)中,但它们包含一些将它们与常规库分开的关键区别特征。

软件框架具有将这些function与库或普通用户应用程序分开的独特function:

  1. 控制反转 – 在一个框架中,不同于图书馆或者普通的用户应用程序,整个程序的控制stream程不是由调用者决定的,而是由框架决定的[1]。
  2. 默认行为 – 框架具有默认行为。 这个默认的行为实际上是一些有用的行为,而不是一系列的空操作。
  3. 可扩展性 – 用户通常可以通过select性覆盖或由用户代码专门提供特定function来扩展框架。
  4. 不可修改的框架代码 – 一般来说,框架代码是不允许修改的。 用户可以扩展框架,但不能修改其代码。

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

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

通过相当简单的事情,您可以将框架视为除了实际function之外的完整应用程序。 你插入function和PRESTO! 你有一个应用程序。

考虑一下,比如一个GUI框架。 该框架包含您制作应用程序所需的一切。 事实上,你可以通过几乎没有任何东西的源代码来做一个最小化的应用程序,但它确实给你提供了窗口pipe理,子窗口pipe理,菜单,button栏等。这就是事物的框架。 通过添加您的应用程序function并将其“插入”到框架的正确位置,您可以将这个空白的应用程序变成一个真正的,完整的应用程序。

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

我再次强调,这是一个框架的简化视图。 虽然大多数框架都有内置的可怕概念,但我并没有使用像“Inversion of Control”之类的可怕术语。 既然你是一个初学者,我想我会把你的行话放在一边,用简单明了的方式去做。

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

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

一个框架可以被定义为一套图书馆,说:“不要打电话给我们,我们会打电话给你”。

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

一个简单的解释是:框架是一个脚手架,你可以build立应用程序。

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

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

在最底层,一个框架就是一个环境,在这个环境中你可以获得一系列的工具

这个工具以库,configuration文件等forms出现

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

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

人们会用框架来certificate这一点,你不必从头开始编码。 但这些只是让图书馆和框架混淆的人。

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

框架为特定问题领域提供function/解决scheme。
从wiki定义:

计算机编程中的软件框架是一种抽象,其中提供通用function的通用代码可以被用户代码select性地覆盖或专门化,从而提供特定的function。 框架是软件库的一个特例,它们是可重复使用的抽象的代码,包装在定义良好的应用程序编程接口(API)中,但它们包含一些将它们与常规库分开的关键区别特征。

一个框架可以帮助我们使用“已经创build”,一个比喻可以像,

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

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

框架有一些你可能需要的function。 你可能需要某种具有内置sorting机制的数组。 或者,也许你需要一个窗口,你想放置一些控件,所有你可以在框架中find。 这是一种围绕自己的工作跨越框架的工作。

编辑:好吧,我正要挖你们想告诉我的东西;)你可能还没有注意到在“越来越深入越来越深入”之前的“跨越框架的工作”之间的信息。 我试着发表一下,希望你能够成功:
我在这里find了关于“图书馆和框架之间的区别”的一个很好的解释
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

除了定义之外,有时只有当你已经明白的时候才能理解定义,一个例子帮助了我。

我觉得在用.Netsorting列表的时候,我有了一丝理解; 提供由用户代码提供的特定function定制的function的框架的示例。 采取List.Sort(IComparer)。 Sort方法中的.Net框架中的sortingalgorithm需要进行一系列比较; 对象A在对象B之前还是之后? 但sorting本身并不知道如何做比较; 只有被sorting的types知道这一点。 你不能写一个可以被许多用户重用的比较sortingalgorithm,并且可以预测你将被调用的所有不同types的sortingalgorithm。 你必须把这一点工作留给用户本身。 所以在这里,sorting,即框架,调用回用户代码中的方法,types被sorting,以便它可以做比较。 (或者可以使用代表;同样的观点)

我有这个对吗?

一般来说,一个框架工作是真实的或概念性的结构,旨在作为支持或指导build设一些东西,扩大结构成为有用的东西… …