通过模式、模型、框架和工具装配应用程序

2008-04-09 04:03:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

简介
本文讨论由 Microsoft 开发的、我们称之为“软件工厂”的方法学。简言之,软件工厂是一个开发环境,该环境经过配置可以支持特定类型应用程序的快速开发。尽管软件工厂实际上只是软件开发方法和实践的持续发展过程中的下一个合乎逻辑的步骤,但它们承诺通过引入工业化模式来改变软件行业的性质。

本文是一系列有关软件工厂的四篇文章中的第三篇,重点讨论软件工厂方法学。第一篇文章描述了将推动从技能向制造进行转换的力量。第二篇文章描述了妨碍这种转换的慢性问题,以及将帮助我们克服这些问题的关键性创新。最后一篇文章回答了一些有关软件工厂的常见问题。

新的软件开发模式
在上一篇文章中,我们考察了妨碍转换的慢性问题以及将帮助我们克服这些问题的关键性创新。尽管这些关键性创新中的每一个都具有重要作用,但它们中没有一个能够单独推动从技能向制造的转换。关键在于将关键性创新集成到条理分明的方法学中。这就是软件工厂的目标。在谈论软件工厂之前,我们必须先介绍软件架构和软件模板。

软件架构

软件架构是一个文档,它以有条理的方式对用于生成和维护系统的人工制品(例如,XML 文档、模型、配置文件、生成脚本、源代码文件、SQL 文件、本地化文件、部署清单和测试用例定义)进行分类和概括,并且定义它们之间的关系,以便我们可以维护它们之间的一致性。

常见的方法是使用网格,如图 1 所示。列定义了所关心的问题,而行定义了抽象级别。每个单元格都定义了一个观点或视点,由此我们可以生成软件的某个方面。例如,对于 3 层应用程序,一个单元格可能在表示层上定义一个抽象视点,第二个单元格可能在数据层上定义一个抽象视点,第三个单元格可能在数据层上定义一个具体视点(用于开发数据库架构)。在定义了网格之后,我们可以用构成特定软件产品的开发人工制品的视图来填充它。

图 1. 描述产品系列的网格

当然,网格可以用来生成一个以上的软件产品。在用特定的视图填充它之前,它定义了生成软件产品系列的成员所需的材料清单。从软件产品系列获得提示,我们可以更进一步,并向每个单元格中添加信息,以标识用来生成每个视点所需的视图的生产资产,包括 DSL、模式、框架、工具和微过程。

网格本身并不是什么创新。真正的创新在于将网格应用于产品系列,以便标识每个单元格的生产资产,并定义可用来完全或局部地自动执行模型转换、代码生成、模式应用、测试装置构建、用户界面布局、数据库架构设计以及其他很多开发任务的单元格之间和内部的映射。正如我们已经看到的那样,我们必须使用基于高保真语言(如 XML、C# 和 SQL)的一流开发人工制品,以便提供这种自动化机制。对于模型而言,这意味着使用 DSL,而不是为文档管理设计的通用建模语言。在某些情况下,视点所描述的人工制品是模型,但通常不是这种情况。它们可以是基于形式语言的任何源人工制品,例如,高级别工作流脚本、通用编程语言源代码文件、WSDL 文件或 SQL DDL 文件。

请注意,视点不仅定义了用来开发视图的语言,而且定义了对视图的要求(通常表示为约束或模式)。例如,软件架构可能包含两个使用相同的类建模 DSL 的视点。我们可能要求根据这些视点之一建模的所有类,直接或间接地从与该视点相关联的用户界面小部件框架所提供的类继承。同样,我们也可能要求根据其他视点建模的所有类在与该视点相关联的其中一个业务实体实现模式中发挥确定的作用。在实际的软件架构中,相同的语言通常由多个视点(尤其是靠近基于通用编程语言的平台的视点)使用。

图形形式的软件架构

当然,即使是极为详细的网格也是对现实的过度简化。软件架构可以更好地表示为有向图,它的节点为视点,它的边为视点之间的可计算关系(称为映射)。这使得在网格表示中不相邻的节点可以相关。同时,它放宽了由网格施加的人为约束,即视点必须适合纯粹的分类方案,并且创建了行和列。最后,并且是最为重要的一点是,它使架构能够反映出软件体系结构。因此,例如,一系列业务应用程序的架构可能包含多个视点簇,每个簇对应于一个子系统(例如,客户管理、目录管理或订单执行)。然后,可以将每个簇中的视点进一步划分为多个子集,以反映每个子系统的分层体系结构,如图 2 所示。

软件架构描述构成软件产品的人工制品,就像 XML 架构描述构成文档的元素和属性,以及数据库架构描述构成数据库的行和列一样。像体系结构说明标准 (ADS) 一样,软件架构是用于描述软件产品系列成员的模板。但是,尽管存在这种相似性,但在软件架构和 ADS 之间还存在几个重大差异:

ADS 仅处理体系结构,而软件架构则处理软件产品系列的很多其他方面,例如,要求、可执行文件、源代码、测试装置和部署人工制品。

ADS 对设计文档进行组织,而软件架构则对开发人工制品进行组织。

尽管 ADS 蕴含一个软件产品系列,但它并不显式标识这样一个系列,也不包含用于支持基于系列的开发的机制,例如,用于表达该系列的成员与系列原型有哪些差异的方式。另一方面,软件架构面向特定的软件产品系列,并且可以实例化和自定义,以便根据特定的系列成员与系列原型之间的差异来描述该成员。

ADS 不一定支持自动化,而软件架构可以由软件模板实现,以自动执行软件开发任务(正如我们稍后将看到的那样)。

当然,软件架构的基本特性在于,它基于被组织的人工制品的各种方面(例如,它们的抽象级别、在体系结构内部的位置、功能或操作质量)对人们所关心的内容提供了多维分隔。按照 Coplien 的说法:

我们可以使用共同性和变异性原理来分析应用程序域,以便将其划分为多个子域,其中每个子域都可能适合于按照特定的范型进行设计。

现在,我们可以将网格视为图形的二维投影,它在横轴上绘制了一个或多个特征,在纵轴上绘制了不同的抽象级别。另一个二维投影是特征平面,它将相关的视点投影到产品体系结构的某个部分,从而提供了从该视点观察到的统一视图。特征平面的示例包括逻辑数据、安全策略和事务平面。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:UML建模风格之顺序图

下一篇:轻量级数据仓库的实现方法