软件框架

计算机编程中,软件框架是一个抽象,可以通过其他用户编写的代码选择性更改提供通用功能的软件,从而提供特定于应用程序的软件。它提供了一种构建和部署应用程序的标准方法,是一种通用的可重复使用的软件环境,它提供了特定功能,作为较大软件平台的一部分,可促进软件应用程序,产品和解决方案的开发。

软件框架可以包括支持程序,编译器,代码库,工具集和应用程序编程接口(API) ,这些界面(API)将所有不同组件汇总在一起以启用项目系统的开发。

框架具有关键的区分功能,可以将它们与普通分开:

  • 控制倒置:在框架中,与库或标准用户应用程序不同,总体程序的控制流不取决于呼叫者,而是由框架决定。这通常是通过模板方法模式实现的。
  • 默认行为:可以用框架提供的抽像类中的模板方法模式的不变方法提供。
  • 可扩展性:用户可以通过选择性覆盖 - 或程序员可以添加专门的用户代码来提供特定功能。这通常是通过子类中的钩方法来实现的,该子类覆盖了超类中的模板方法。
  • 非模块化框架代码:一般来说,框架代码不应在接受用户实施扩展时进行修改。换句话说,用户可以扩展框架,但不能修改其代码。

理由

软件框架的设计师旨在通过允许设计师和程序员花时间满足软件要求,而不是处理提供工作系统的更标准的低级细节,从而减少整体开发时间,从而促进软件开发。例如,使用网络框架开发银行网站的团队可以专注于编写特定的银行代码,而不是请求处理和州管理的机制。

框架通常会增加程序的大小,这种现象称为“代码膨胀”。由于客户需求驱动的应用程序需求,竞争和互补框架有时最终会出现在产品中。此外,由于其API的复杂性,由于需要花更多的时间学习使用该框架,因此可能无法实现整体开发时间的预期减少。当开发人员首先遇到特殊或新框架时,这种批评显然是有效的。如果在随后的职位任务中不使用这样的框架,那么学习框架的投入时间比项目员工熟悉的专用代码的成本还高。许多程序员保留有用的样板代码的副本,以满足共同的需求。

但是,一旦学习了一个框架,未来的项目就可以更快,更容易完成。框架的概念是制作一个尺寸适合的解决方案集,并且熟悉的代码生产应在逻辑上增加。没有关于代码规模最终与输出产品捆绑在一起的说法,也没有提出相对效率和简洁性。除非软件是编译器 - 对象链接器,否则使用任何库解决方案必定会吸入其他库中的插入和未使用的无关资产。

问题仍然存在,但是十年以上的行业经验表明,最有效的框架原来是从重新分配企业的常见代码而发展的,而不是使用通用的“一级适合” “第三方为一般目的而开发的框架。一个例子是将其应用程序包中的用户界面作为Office Suite的增长,以使其具有共同的外观,感觉和数据共享属性和方法,作为曾经不同的捆绑应用程序,将其统一成更严格的套件。和较小;较新的/进化的套件可以是共享积分实用程序库和用户界面的产品。

争议中的这种趋势提出了有关框架的重要问题。建立一个优雅的框架,而不是仅仅解决问题的框架仍然是一种手工艺,而不是科学。 “软件优雅”意味着清晰度,简洁性和少量浪费(额外的或外部功能,其中大部分是用户定义的)。例如,对于生成代码的框架,“优雅”将意味着创建对合理知识渊博的程序员(因此易于修改)的代码,而仅生成正确的代码的代码(因此易于修改)。优雅问题是为什么相对较少的软件框架经受了时间的考验:最好的框架能够随着它们的基础技术的高级技术而优雅地发展。即使在进化之后,许多这样的软件包也将保留旧软件的传统功能,因为否则替换的方法与较新的方法并行保留。

例子

软件框架通常包含大量的家政和实用性代码,以帮助引导用户应用程序,但通常专注于特定问题域,例如:

建筑学

根据Pree,软件框架由冷冻斑点热点组成。冷冻点定义了软件系统的整体体系结构,即其基本组件及其之间的关系。这些在应用框架的任何实例化中保持不变(冷冻)。热点表示程序员使用框架的那些部分添加了自己的代码,以添加特定于自己项目的功能。

面向对象的环境中,一个框架由抽象具体组成。这种框架的实例化包括组成分类现有类。

可以通过使用模板方法模式来实现必要的功能,其中冷冻点称为不变方法,而热点被称为变体或钩方法。超类中的不变方法提供默认行为,而每个子类中的钩方法都提供自定义行为。

在使用软件框架开发混凝土软件系统时,开发人员根据系统的特定需求和要求使用热点。软件框架依赖于好莱坞原则:“不要给我们打电话,我们给您打电话。”这意味着用户定义的类(例如新子类)从预定义的框架类接收消息。开发人员通常通过实现超类摘要方法来处理这一点。

也可以看看