这两天为了画类图,非要装RSA。然后又看了IBM developerWorks上有关RSA的教学视频,认真看完了一遍,收获还是蛮大的。在这里简单总结一下系统架构设计所涉及到的几个常用工具。
1,用例( Use Case )
(1)用例是最上层的设计图,当然逻辑上也最简单。
(2)参与者在子系统之外,通过子系统之间的用例联系
(3)用例和用例之间存在包含和扩展关系。
2,类图(Class Diagram)
(1)这个最常用,我也不用多说了
(2)类与类之间的一般化(generation)关系一般为:扩展(即继承),实现
(3)类与类之间的关联(association)关系一般由轻到重为:依赖(参数引用),关联(成员变量),聚集(较强的关联,整体和个体之间的关系),合成(成员变量,负责构造和销毁)
3,时序图(TimeSequence)
(1)这是我比较喜欢的图,虽然我在找工作面试的时候被这种图难倒过。但在实际的项目和工作中,这种图非常有用,我用时序图也解决了好多复杂问题。
(2)它可以帮你理清在某一过程中,各个角色之间的关系和时序。
(3)我比较喜欢花类的时序图,类下的bar就是一个方法,类与类之间的关系就是他们的调用
(4)一般不画返回值,除非特别重要。
(5)虽然没有实践过,但时序图应该也能来分析多线程之间的协同工作。
4,组件(Component)
(1)在RSA中,Component图指的不是这个,但我觉得这个图叫Component图更合适
(2)在Java中,一个Package可以称为一个Component,在RCP中,一个Plugin或者一个feature也可称为一个Component。
(3)这个图主要显示的Component之间的上下层依赖关系,能画出这个图,就对系统的整体架构一目了然。也可用于分析当前的系统架构是否合理
(4)这个图没有表现出Component和Component之间的具体关联,也就是Component和Component之间的接口。不过这一般是通过Component里面的某个类的某个方法,调用了另一个Component里面的某个类的某个方法(或者API)。根据迪米特法则,这种关联应该越少越好。
5,物理拓扑(PhysicalTopology)和部署(Deployment)
(1)曾经在客户那里Onsite解决一个performance问题的时候,用过这种图,但是是自己手划。
(2)对理解和分析整个应用,特别是Web应用有一定帮助
6,状态机(State Machine)
(1)用的不多,但在网络编程和编译器里用的应该很多
(2)曾在一个xml的parser中尝试用这个图。
7 ,活动图(Activity)
(1)也没有用过,但是感觉和写程序的流程图(FlowChart)有点类似,只不过引入了多个类。
(2)时序图和流程图的结合?