在RUP过程的初始阶段(跨业务需求分析阶段+概要设计 比重30%)、细化阶段(跨概要设计+详细设计阶段比重50%)、构造阶段(跨编码实现与测试阶段比重15%),交付阶段(跨系统集成与系统验收阶段 比重5%),随软件生命周期的进行在比重上逐渐减少,一个好的架构应该体现在为应用系统的开发提供很好的思路指导时力争使软件产品在构建构件可重用的、可扩展的、性能优越的达到极致!
架构设计的本身也应该在一个指导思想下进行设计,那么这个指导思想就是一个更高层次的“高层设计”,它一般来源于成熟的设计理念与经过实践验证且良好可用的设计模式(如MVC/PProxy/Layer分层/Pipe and filter等等)!但有时我们需要创新,那么就让我们来定义这个高层设计吧,这往往需要勇气,因为不成熟的设计模式需要我们自已来验证它是否能满足解决我们的实际问题,并需要我们从理论上理论上为它找到注解。最后需要说明的是,这个"高层设计"是在架构设计未开始前已经呈现在你的脑海中,它与你平时的设计习惯与接受的专家思想有关,由于你的了然与"脑",所以这张图多数最终没有出现在架构设计的输出结果中.
架构设计的主要任务是从各个不同视角对应用系统的分解与切片,这个分解与切片的结果是得到一个个的可以用来供"客户人员+设计人员+编程人员+管理人员"交流的视图,这些视图,就是UML中所谓的"模型视图". 除了前面提到的“高层设计”图外,它们可能是业务用例模型视图、分析阶段模型视图、设计阶段模型视图、实现阶段模型视图、实施阶段模型视图,这是4+1视图(1代表业务用户视图),但加上前面提到的“高层设计”图,那么应该是一个1+4+1的视图组合。各个视图在软件开发的各个阶段各司其职,为生命周期中的每个阶段提供指导:
高层设计图:为整个应用架构的设计打开纲领导性指导 (了然于"脑"的那个,可能没有具体输出)
分析阶段模型视图:为需求分析人员与业务人员的交流提供一个双方互通的语言
设计阶段模型视图:为架构设计人员、系统总体设计人员、详细设计人员提供可交流语言
实现阶段模型视图:为详细设计人员、编程人员、测试人员提供交流与描述语言
实施阶段模型视图:为系统集成人同、应用测试及发布人员提供一个规则描述
4. 架构设计师的工作
软件架构设计师需要在上面的4+1组成视图中需要侧重设计出哪能些视图呢,架构设计的工作重点是什么呢?
首先说明一下各类模型视图的内容吧,再说明架构设计师要做到哪些.
分析阶段模型视图:(业务调研+需求分析) :用例图/类图/对象图 用来捕获用户需求,供需求分人员与业务人员交流
设计阶段模型视图:(概要设计+详细设计) :协作图/顺序图/活动图/状态图 描述元素之间的交互动态
实现阶段模型视图:(编码实现+测试) :类图/对象图/组件图 描述需要编程实现各个元素及元素的组织形式
(成 为一个个构件)
实施阶段模型视图:(系统集成+系统交付) :组件图/布署图 描述软件系统中构件的集成方式及布署的环境配
置,将构件映射到配置上
我们知道各个阶段的模型视图是与软件生命周其相关的,所以对于架构设计师来说,应该在周期的"编程实现"之前完成绝大部分工作,所以架构设计师应完成"分析阶段模型视图" ,"设计阶段模型视图",这两个阶段是RUP中的初始阶段与细化阶段,并且RUP是讲迭代的,所以架构设计也是一个迭代的设计过程,并且这个工作可能一直延续到后面的构造阶段与交付阶段.但对于架构设计师来说,设计是重点,实现与测试是非重点.所在应该在RUP过程的细化阶段的最后提供一个良好的且稳定的架构系统,它应该包括相应的模型视图、架构描述及骨架系统.所谓模型视图前面有所述;架构描述是指对系统架构及模型视图的简要描述,力求做到标准化,以便在系统实现阶段作为一个可操作标准;骨架系统是指一个对重要业务用例进行实现的、包括核心可执行代码的、可运行的、供实现阶段参考的一个原形系统,是实现阶段的模拟参与系统.
可以以一句话概括架构设计师的工作:应该在设计模型视图的同并构建一个良好的稳定的"骨架系统".
a.静态模型: 用例图、类图(包括包)、对象图、组件图和配置图
b.动态模型 :协作图/顺序图/活动图/状态图
UML的图的分类图如下(这是我的理解,没有从其它类别上再去分类,简单就是美):
分类
|
图名
|
概念
|
|
类图
|
类、关联、泛化、依赖关系、实现、接口
|
用例图
|
用例、参与者、关联、扩展、包括、用例泛化
| |
构件图
|
构件、接口、依赖关系、实现
| |
部署图
|
节点、构件、依赖关系、位置
| |
动态
|
协作图
|
协作、交互、协作角色、消息
|
活动图
|
状态、活动、完成转换、分叉、结合
| |
状态图
|
状态、事件、转换、动作、
| |
顺序图
|
交互、对象、消息、激活
| |
模型管理
|
类图
|
包、子系统、模型
|
可扩展性
|
所有
|
约束、构造型、标记值
|