谁能给我解释一下什么是软件框架?为什么我们需要一个框架?框架做了什么来简化编程?
框架具有您可能需要的一些功能。您可能需要某种具有内置排序机制的数组。或者,您可能需要一个窗口,您想在其中放置一些控件,所有这些都可以在框架中找到。这是一种跨越你自己作品框架的作品。
维基百科总结(软件框架)(第一个谷歌命中btw)解释得很好:
在计算机编程中,软件框架是一种抽象,其中提供通用功能的公共代码可以被提供特定功能的用户代码选择性地覆盖或专门化。框架是软件库的一种特殊情况,因为它们是包装在定义良好的应用程序编程接口(API)中的代码的可重用抽象,但它们包含一些将它们与普通库区分开来的关键区别特性。 软件框架具有这些区别于库或普通用户应用程序的特征: 控制反转 -在框架中,与库或普通用户应用程序不同,整个程序的控制流不是由调用者决定的,而是由框架决定的 默认的行为 -框架有一个默认行为。这个默认行为必须是一些有用的行为,而不是一系列无操作。 可扩展性 -一个框架可以由用户扩展,通常是通过选择性重写或由用户代码提供特定的功能来特殊化。 不可修改的框架代码 -框架代码,在一般情况下,不允许被修改。用户可以扩展框架,但不能修改其代码。
在计算机编程中,软件框架是一种抽象,其中提供通用功能的公共代码可以被提供特定功能的用户代码选择性地覆盖或专门化。框架是软件库的一种特殊情况,因为它们是包装在定义良好的应用程序编程接口(API)中的代码的可重用抽象,但它们包含一些将它们与普通库区分开来的关键区别特性。
软件框架具有这些区别于库或普通用户应用程序的特征:
您可能“需要”它,因为它在开发应用程序时为您提供了一个很好的快捷方式,因为它包含了许多已经编写和测试过的功能。原因与我们使用软件库的原因非常相似。
从技术上讲,你不需要一个框架。如果你想做一个非常非常简单的网站(想想1992年的网页),你可以用硬编码的HTML和一些CSS来完成。
如果你想要创建一个现代的web应用程序,你实际上也不需要需要来使用框架。
然后,如果你do使用框架,你将能够受益于优秀的,通常同行评审和非常测试的工作,几十个如果不是数百个其他开发人员,他们可能比你更好。您可以快速构建想要的内容,而不必花费时间构建或过于担心上面列出的基础设施项目。
您可以在更短的时间内完成更多的工作,并且知道您正在使用或扩展的框架代码很可能比您自己做得更好。
那么成本呢?花点时间学习框架。但是,正如几乎每个web开发人员都会证明的那样,花时间学习从使用你选择的任何框架中获得大量(真的,大量)好处是绝对值得的。
一个软件框架,在计算机中 编程,是一种抽象 哪个公共代码提供泛型 功能可以选择性地 由用户代码覆盖或专门化 提供特定的功能。 框架是一种特殊情况 它们是软件库 代码包装的可重用抽象 在定义良好的应用程序中 编程接口(API),然而他们 包含一些关键区别 区分它们的特征 正常库。< / p >
一个框架帮助我们使用“已经创建的”,一个比喻可以是,
把地球上的物质想象成编程语言,
举个例子,“相机”是一个程序,你决定创建一个笔记本。你不需要每次都重新创建相机,你只需要使用earth框架(例如技术商店)将相机并将其集成到你的笔记本电脑中。
一个简单的解释是:框架是一个可以围绕它构建应用程序的支架。
框架通常提供一些基本功能,你可以使用和扩展这些功能来创建更复杂的应用程序,有各种各样的框架。微软的MVC框架就是一个很好的例子。它提供了使用MVC模式建立网站所需的一切,它处理网络请求,路由等。你所要做的就是实现“控制器”和提供“视图”,这是由MVC框架定义的两个结构。然后MVC框架处理控制器的调用和视图的呈现。
也许不是最好的措辞,但我希望它有帮助
在最低的层次上,框架是一个环境,在其中您可以使用一组工具
这些工具以库、配置文件等形式出现。
这个所谓的“环境”为您提供了基本的设置(错误报告、日志文件、语言设置等)……它可以被修改,扩展和构建。
人们实际上不需要框架,这只是想要节省时间的问题,而其他人只是个人喜好的问题。
人们会证明有了框架,你就不必从头开始编码了。但这些只是人们混淆了库和框架。
我在这里没有偏见,实际上我现在使用的是一个框架。
我不确定“框架”是否有一个明确的定义。有时,一组很大的库被称为框架,但我认为这个词的典型用法更接近于aioobe带来的定义。
非常好的文章总结了一组库和框架之间的区别:
框架可以定义为一组库,它们说“不要给我们打电话,我们会给你打电话”。
框架如何帮助您?因为您不需要从头开始编写一些东西,基本上只需扩展一个给定的工作应用程序。通过这种方式,您可以获得很高的生产率——有时最终得到的应用程序可能比您在相同时间内自己所做的要复杂得多——但您通常会牺牲很多灵活性。
已经有很多很好的答案了,但让我看看我是否能给你另一个观点。
为了简化事情,您可以将框架视为一个除了实际功能之外完整的应用程序。你插入功能和PRESTO!你有一个应用程序。
比如说,考虑一个GUI框架。框架包含了创建应用程序所需的所有内容。实际上,你经常可以用很少的代码行创建一个最小的应用程序,它什么都不做——但是它确实为你提供了窗口管理、子窗口管理、菜单、按钮栏等。这是框架方面的问题。通过添加应用程序功能并将其“插入”到框架中的正确位置,您可以将这个除了窗口管理以外什么都不做的空应用程序变成一个真正的、成熟的应用程序。
对于web应用程序,服务器端应用程序等也有类似类型的框架。在每种情况下,框架提供了大量乏味、重复的代码(希望如此),而您提供了实际的问题域功能。(这是理想状态。当然,在现实中,框架的成功有很大的变数。)
我再次强调,这是对框架的简化观点。我没有使用像“控制反转”之类的可怕术语,尽管大多数框架都内置了这样可怕的概念。既然你是初学者,我想我就不给你行话了,用一个简单的比喻。
除了定义(有时只有在你已经理解的情况下才能理解)之外,还有一个例子帮助了我。
当我在。net中对列表排序时,我想我有了一点理解;一个框架的例子,它提供了一个由提供特定功能的用户代码定制的功能。list . sort (IComparer就带)。排序算法,位于。net框架的sort方法中,需要做一系列比较;物体A在物体B之前还是之后?但是Sort本身并不知道如何进行比较;只有被排序的类型知道这一点。你不能编写一个可以被许多用户重用的比较排序算法,并预测你将被调用排序的所有不同类型。你必须把这部分工作留给用户自己。这里,sort,也就是框架,回调用户代码中的一个方法,类型被排序,这样它就可以进行比较。(或者可以使用委托;相同的点)。
我算对了吗?
我很晚才接。但是,我想分享一个我今天才想到的例子。如果我让你剪一张5米乘5米的纸,你肯定会照做。但是假设我让你剪1000张相同尺寸的纸。在这种情况下,你不会做1000次测量;显然,你可以做一个5米乘5米的框架,然后在它的帮助下,你可以在更短的时间内裁掉1000张纸。所以,你所做的就是做一个框架来完成特定类型的任务。您不必为相同类型的应用程序一次又一次地执行相同类型的任务,而是创建一个框架,将所有这些功能放在一个漂亮的包中,从而为您的应用程序提供抽象,更重要的是为许多应用程序提供抽象。
一般来说,框架作品是真实的或概念性的结构,旨在作为建筑的支撑或指南,将结构扩展为有用的东西……