任务:合并现有设计元素
此任务描述了如何转变并优化设计模型。
用途
  • 分析分析类的交互以查找接口、设计类和设计子系统
  • 优化体系结构,在可能的情况下合并重用。
  • 确定常见设计问题的通用解决方案
  • 将在体系结构方面重要的设计模型元素包含到软件体系结构文档的逻辑视图部分。
关系
步骤
确定复用机会
目的 确定可以重用现有子系统和/或组件的位置(基于它们的接口)。 

查找提供相似接口的现有子系统或组件。 将确定的每个接口与现有子系统或组件提供的接口作比较。通常将不存在精确的匹配,但可找到近似匹配。首先查找相似行为和返回值,然后考虑参数。

修改新确定的接口以提高符合程度。 对候选接口做出较小的更改是有可能的,这将提高该接口与现有接口的一致性。简单的更改包括重新调整或添加候选接口的参数,然后分解该接口(分割成几个接口),这些接口中的一个或多个与现有组件的接口匹配,并具有位于独立接口中的“新”行为。

当存在精确匹配时,用现有接口替换候选接口。 在简化和分解之后,如果候选接口与现有接口存在精确匹配,则除去候选接口并只使用现有接口。

将候选子系统映射到现有组件。 查看现有组件和该组候选子系统。分解子系统,以便在可能的情况下使用现有组件来满足系统所需行为。在候选子系统可由现有组件实现的情况下,在实施模型中创建设计子系统和组件之间的可跟踪性。

在将子系统映射到可重用的组件上时,请考虑与子系统关联的设计机制;无论操作特征之间其他方面的匹配多完美,性能或安全需求会导致组件失去重用资格。

反向设计组件和数据库
目的 合并其他项目、外部源或先前迭代中的可能可重用的模型元素。 

可以“提取”现有代码和数据库定义,以使在先前项目或迭代中所做的工作可用于当前项目/迭代。通过将可能的重用机会用作过滤器,反向设计的工作可以只侧重于可重用于当前迭代的组件。

反向设计组件

在建立相似系统的组织中,通常有一组常用组件提供新系统所需的多个体系结构机制。也有可在市场上买到的组件,这些组件也提供体系结构机制。应检查现有组件来确定它们在软件体系结构中的适用性和兼容性。

现有组件 - 在先前迭代期间开发但尚未包含在设计模型的组件或购买的组件必须是反向设计的并合并到设计模型中。在设计模型中,这样的组件一般表示成具有一个或多个接口的子系统。

反向设计数据库

数据库及其驻留在其中的数据代表可重用资产的最重要的来源之一。 要重用包含在现有数据库中的隐含类定义,请确定已经驻留在现有数据库中的由应用程序使用的信息。反向设计一组类来表示保存此信息的数据库结构。同时,构造应用程序的类表示和数据库中所用结构之间的映射。 有关反向设计数据库的更多信息,请参阅工作产品指南:反向设计关系数据库。有关类和关系数据库中的表之间的映射的更多信息,请参阅工作产品指南:数据模型

更新设计模型的组织
目的 说明设计模型组织中的新模型元素。
在必要时重新平衡设计模型的结构。 

当新元素已添加到设计模型中时,通常需要重新封装设计模型的元素。重新封装实现了几个目标:在设计模型中,减少包之间的耦合度并提高包内的内聚性。最终目标是允许不同的人员或团队相互独立设计和开发不同的包(和子系统)。 虽然完全独立可能无法实现,但包之间松散的耦合度往往会使大型或复杂系统的开发更轻松。

“平面”模型结构(其中所有包和子系统驻留在系统的相同概念级别)适合于小型系统;更大型系统需要称为“分层”的附加构造工具(请参阅工作产品指南:分层)。 分层规则定义某些类型的包之间所允许的关系的限制。这些规则识别不应存在的某些依赖关系:应用程序功能不应直接依赖特定操作系统或窗口系统服务 - 应该存在包含逻辑操作系统和窗口服务的中间层,该层使应用程序功能与低级实施服务中的变更相隔绝。 分层提供了减少变更影响的一种方法:通过强加限制包和子系统之间的依赖关系的规则,减少包和子系统之间的耦合程度,使系统变得更健壮。并能容忍变更。

当向系统添加新模型元素时,现有的包可能增长得太大以致无法由单个团队管理:必须将这个包分割成包内高度内聚但包间松散耦合的几个包。这样做可能很困难 - 一些元素可能很难放置在一个特定包中,因为两个包的元素都要使用这些元素。有两种可能的解决方案:将该元素分割成几个对象,每个包中一个(当该元素具有几种“特性”或多组在某种程度上分离的职责时,这样做很有效),或者将该元素移进更低层的某个包中,这样所有更高层元素都可以平等地依赖它。

当系统复杂性增加时,将需要更多的层,以便具有可维护和可理解的结构。但是,超过 7-10 层甚至在最大型系统中也是罕见的,因为随着层数的增加,复杂性会增加,而可理解性会降低。

分层的示例(包括中间件和系统软件层)如下所示:

Java/Web 应用程序布局图

基于 Java/Web 的应用程序的示例包分层。 注意:TCP/IP 包上的依赖关系通常不显式建模,因为 TCP/IP 服务的使用封装在 Java VM、java.rmi 和 Web 浏览器中。在此描述它们只是为了说明。

将子系统和各层的职责分配给个人或团队。每个包或子系统应是个人(如果范围很小)或团队(如果范围很大)的职责。

更新逻辑视图
目的 确保工作产品:软件体系结构文档(逻辑视图)始终是最新的。 

当从体系结构的角度来说,设计类、包和子系统(模型元素)很重要时,它们应包含在工作产品:软件体系结构文档的逻辑视图部分。这将确保在体系结构方面重要的新模型元素会传达给其他项目团队成员。

此外,软件设计人员角色与流程工程师角色协作,为设计人员和实施者提供关于如何使用新并入的设计元素的详细指南。



属性
多次出现
事件驱动
正在进行
可选
已计划
可重复
更多信息