Answers:
我很迟才回答。但是,我想分享一个例子,我今天才想到。如果我告诉过您切一张5m x 5m的纸,那么您肯定会这样做。但是,假设我要您削减1000张相同尺寸的纸张。在这种情况下,您将无法进行1000次测量。显然,您将制作一个5m x 5m的框架,然后借助它,您可以在更少的时间内切割1000张纸。因此,您要做的是建立一个可以执行特定类型任务的框架。您无需创建对同一类型的应用程序一次又一次地执行相同类型的任务,而是创建一个框架,将所有这些功能组合在一个漂亮的数据包中,从而为您的应用程序(更重要的是为许多应用程序)提供抽象。
从技术上讲,您不需要框架。如果您要制作一个真正非常简单的网站(可以回想起1992年的网络),则可以使用硬编码的HTML和一些CSS来完成所有工作。
而且,如果您要制作现代的Web应用程序,则实际上也不需要使用任何框架。
您可以选择每次都编写自己需要的所有逻辑。您可以编写自己的数据持久性/存储层,或者-如果您太忙-只需为每个数据库访问编写自定义SQL。您可以编写自己的身份验证和会话处理层。和您自己的模板发布逻辑。还有您自己的异常处理逻辑。和您自己的安全功能。还有您自己的单元测试框架,以确保一切正常。和你自己的... [持续了很长时间]
再说一次,如果您确实使用了框架,那么您将可以受益于数十名(如果不是数百名)其他开发人员的出色,通常经过同行评审和经过良好测试的工作,他们可能比您更好。您将可以快速构建自己想要的东西,而不必花费时间来构建或过多担心上面列出的基础架构项目。
您可以在更短的时间内完成更多工作,并且知道您正在使用或扩展的框架代码比您自己完成的工作更有可能完成。
以及这的成本?花一些时间学习框架。但是-几乎每个Web开发人员都会证明-绝对值得花时间学习使用所选的任何框架来获得巨大(确实是巨大的)收益。
Wikipedia(软件框架)的摘要(第一个由Google推荐的btw)对其进行了很好的解释:
在计算机编程中,软件框架是一种抽象,其中提供通用功能的通用代码可以由提供特定功能的用户代码选择性地覆盖或专门化。框架是软件库的一种特殊情况,因为它们是包装在定义良好的应用程序编程接口(API)中的可重用代码抽象,但是它们包含一些与众不同的关键区别功能。
软件框架具有以下与众不同的功能,可将它们与库或普通用户应用程序分开:
- 控制反转 -在框架中,与库或普通用户应用程序不同,整个程序的控制流不是由调用者决定,而是由框架决定。[1]
- 默认行为 -框架具有默认行为。此默认行为实际上必须是一些有用的行为,而不是一系列的无操作。
- 可扩展性 -框架通常可以由用户通过选择性覆盖来扩展,也可以由提供特定功能的用户代码来专门化。
- 不可修改的框架代码 -通常不允许修改框架代码。用户可以扩展框架,但不能修改其代码。
您可能会“需要”它,因为它包含许多已经编写和测试的功能,因此在开发应用程序时可能为您提供一个捷径。原因与我们使用软件库的原因非常相似。
已经有很多好的答案,但是让我看看是否可以给您另一个观点。
相当简化,您可以将框架视为除实际功能之外完整的应用程序。您插入了功能和PRESTO!您有一个应用程序。
考虑一个GUI框架。该框架包含制作应用程序所需的一切。确实,您经常可以用很少的源代码来完成一个最小的应用程序,而该源代码几乎什么也不做,但是它确实为您提供了窗口管理,子窗口管理,菜单,按钮栏等。这就是框架方面的内容。通过添加您的应用程序功能并将其“插入”到框架中的正确位置,您可以将此无用的应用程序(除了窗口管理等)变成一个真正的功能完善的应用程序。
对于Web应用程序,服务器端应用程序等,有类似类型的框架。在每种情况下,框架都(但愿)提供大量繁琐且重复的代码,同时提供实际的问题域功能。(这是理想的选择。实际上,实际上,框架的成功是高度可变的。)
我再次强调,这是框架的简化视图。尽管大多数框架都内置了此类可怕的概念,但我并未使用诸如“控制反转”之类的可怕术语。由于您是初学者,所以我想我会为您省去行话,并且要简单明了。
框架为特定问题区域提供功能/解决方案。
来自Wiki的定义:
在计算机编程中,软件框架是一种抽象,其中提供通用功能的通用代码可以由提供特定功能的用户代码选择性地覆盖或专用。框架是软件库的一种特殊情况,因为它们是包装在定义良好的应用程序编程接口(API)中的可重用代码抽象,但是它们包含一些与众不同的关键区别功能。
框架具有您可能需要的一些功能。您可能需要某种具有内置排序机制的数组。或者也许您需要一个窗口,您想在其中放置一些控件,这些控件可以在框架中找到。这是一种围绕您自己的作品的框架。
编辑:好的,我要去挖掘你们想告诉我的内容;)在此之前,您可能还没有注意到“跨越一个框架的工作...”两行之间的信息。我希望对此有所发言,以使您满意:
我在这里http://ifacethoughts.net/2007/06/04/difference-between-很好地解释了“库与框架之间的差异”问题。
库和框架/
除了定义(有时只有在您已经理解的情况下才是可以理解的)之外,一个示例对我有所帮助。
我想在偏爱.Net中的列表排序时会有所了解。提供功能的框架示例,该功能由提供特定功能的用户代码量身定制。以List.Sort(IComparer)。排序算法(位于Sort方法中的.Net框架中)需要进行一系列比较。对象A在对象B之前还是之后?但是Sort本身不知道如何进行比较。只有被排序的类型知道这一点。您无法编写一种比较排序算法,该算法可以被许多用户重用,并且可以预期您将被要求进行排序的所有各种类型。您必须将这部分工作留给用户本身。因此,这里又称框架,即排序,它调用用户代码中的一个方法,该类型被排序以便可以进行比较。(或者可以使用委托;
我说对了吗?