谁能给我解释一下什么是软件框架?为什么我们需要一个框架?框架做了什么来简化编程?


当前回答

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

其他回答

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

编辑: 好吧,我将要挖掘你们试图告诉我的东西;)你可能没有注意到“跨越一个框架的工作……”这行之间的信息。 在它越陷越深之前。我试着给它一个地板,希望你优雅地: 我在这里找到了一个很好的解释“库和框架的区别”的问题 http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

维基百科(软件框架)的摘要(第一个谷歌点击顺便说一下)解释得很好:

A software framework, in computer programming, is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code providing specific functionality. Frameworks are a special case of software libraries in that they are reusable abstractions of code wrapped in a well-defined Application programming interface (API), yet they contain some key distinguishing features that separate them from normal libraries. Software frameworks have these distinguishing features that separate them from libraries or normal user applications: inversion of control - In a framework, unlike in libraries or normal user applications, the overall program's flow of control is not dictated by the caller, but by the framework.[1] default behavior - A framework has a default behavior. This default behavior must actually be some useful behavior and not a series of no-ops. extensibility - A framework can be extended by the user usually by selective overriding or specialized by user code providing specific functionality. non-modifiable framework code - The framework code, in general, is not allowed to be modified. Users can extend the framework, but not modify its code.

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

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

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

You can instead choose to write all of the logic you need yourself, every time. You can write your own data-persistence/storage layer, or - if you're too busy - just write custom SQL for every single database access. You can write your own authentication and session handling layers. And your own template rending logic. And your own exception-handling logic. And your own security functions. And your own unit test framework to make sure it all works fine. And your own... [goes on for quite a long time]

然后,如果您确实使用了一个框架,您将能够从优秀的、通常是同行评审的、经过很好测试的其他开发人员的工作中受益,他们可能比您更好。您可以快速构建想要的内容,而不必花费时间构建或过于担心上面列出的基础设施项目。

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

那么成本呢?花点时间学习框架。但是,正如几乎每个web开发人员都会证明的那样,花时间学习从使用你选择的任何框架中获得大量(真的,大量)好处是绝对值得的。

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

I think I got a glimmer of understanding when loooking at sorting a list in .Net; an example of a framework providing a functionality that's tailored by user code providing specific functionality. Take List.Sort(IComparer). The sort algorithm, which resides in the .Net framework in the Sort method, needs to do a series of compares; does object A come before or after object B? But Sort itself has no clue how to do the compare; only the type being sorted knows that. You couldn't write a comparison sort algorithm that can be reused by many users and anticipate all the various types you'd be called upon to sort. You've got to leave that bit of work up to the user itself. So here, sort, aka the framework, calls back to a method in the user code, the type being sorted so it can do the compare. (Or a delegate can be used; same point.)

我算对了吗?

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

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

框架可以定义为一组库,它们说“不要给我们打电话,我们会给你打电话”。

框架如何帮助您?因为您不需要从头开始编写一些东西,基本上只需扩展一个给定的工作应用程序。通过这种方式,您可以获得很高的生产率——有时最终得到的应用程序可能比您在相同时间内自己所做的要复杂得多——但您通常会牺牲很多灵活性。