请问有人能解释一下什么是软件框架吗?我们为什么需要框架?框架如何使编程变得更容易?
我回答晚了,但我想分享一个今天才想到的例子。如果我让你剪一张尺寸为5米乘5米的纸,你肯定可以做到。但是如果我让你剪1000张相同尺寸的纸,那么你不会测量1000次;显然,你会制作一个5米乘5米的框架,然后借助它,在更短的时间内完成剪切1000张纸的任务。因此,你所做的是创建一个可以执行特定类型任务的框架。而不是为相同类型的应用程序反复执行相同类型的任务,你可以创建一个框架,将所有这些功能一起打包,从而为你的应用程序提供抽象,并且更重要的是适用于很多应用程序。
从技术层面上讲,你并不需要使用框架。如果你制作一个非常简单的网站(想想1992年的网络),你可以只使用硬编码HTML和一些CSS来完成。
而且,如果你想制作现代的Web应用程序,你实际上也不需要使用框架。
你可以选择每次都自己编写所需的逻辑。 你可以编写自己的数据持久化/存储层,或者 - 如果你太忙了 - 为每个数据库访问编写自定义SQL。 您可以编写自己的身份验证和会话处理层。 还有自己的模板渲染逻辑。 还有自己的异常处理逻辑。 还有自己的安全功能。 还有自己的单元测试框架,以确保所有工作都正常运行。 以及你自己的... [长篇累牍]
然而,如果你使用框架,你将能够受益于许多其他开发人员的良好、通常经过同行评审和非常经过测试的工作,他们可能比你更优秀。你将能够快速构建想要的内容,无需花费时间构建或过多担心上述基础架构问题。
你可以在更短的时间内完成更多的工作,并知道你正在使用或扩展的框架代码很可能比你自己做得更好。
这需要的代价是什么?花一些时间学习框架。但是,几乎每个Web开发人员都会证明,从你选择的任何框架中学习所花费的时间绝对值得(真的非常值得)。
维基百科关于软件框架的概述(顺便说一下,这是谷歌的第一条搜索结果)解释得非常清楚:
软件框架是计算机编程中的一种抽象,其中通用功能的公共代码可以被用户代码选择性地覆盖或专门化。框架是软件库的一种特殊情况,因为它们是包装在定义良好的应用程序编程接口(API)中的可重用代码抽象,但它们包含一些关键的区别特征,将它们与普通库分开。
软件框架具有以下与库或普通用户应用程序不同之处:
- 控制反转 - 在框架中,整个程序的控制流不是由调用者决定,而是由框架决定。
- 默认行为 - 框架具有默认行为。这种默认行为必须实际上是一些有用的行为,而不是一系列无操作。
- 可扩展性 - 用户通常可以通过选择性覆盖或专门化提供特定功能的用户代码来扩展框架。
- 不可修改的框架代码 - 通常情况下,框架代码是不允许被修改的。用户可以扩展框架,但不能修改其代码。
你可能“需要”它,因为它可以为您在开发应用程序时提供很大的捷径,因为它包含了大量已经编写和测试过的功能。这个原因与我们使用软件库的原因非常相似。
“框架”没有一个清晰的定义。有时候,一大堆库被称为框架,但我认为这个词的典型用法更接近aioobe所提出的定义。
这篇非常好的文章总结了仅是一组库与框架之间的区别:
框架可以被定义为一组库,其说:“别打电话给我们,我们会给你打电话。”
一个框架如何帮助您?因为您基本上只需扩展给定的可工作应用程序,而无需从头编写。这样做可以获得很多生产力——有时候,结果的应用程序可能会比您在相同时间内单独完成的要复杂得多——但通常会牺牲许多灵活性。
通常,框架是一个实体或概念性结构,旨在作为支持或指南,用于建造一些将结构扩展为有用东西的物品...
计算机编程中,软件框架是一个抽象层,其中通用功能的公共代码可以被用户代码选择性地覆盖或专业化。框架是软件库的一种特殊情况,它们是包装在定义良好的应用程序编程接口(API)中的可重用代码抽象,但它们包含一些关键的区别特征,使它们与普通库分开。