1、通用的抽象集合。
可以将软件系统简单的理解成由多个容器构成,容器又由多个组件构成,组件由一个或多个类实现。
类(在一个面向对象系统里,类是最小结构单元)
组件(组件可以想象成一个或多个类组成的逻辑群组,通常由多个类在更高层次的约束下组合而成)
容器(指一个在其内部可以执行组件或驻留数据的东西)
系统(系统是最高的抽象层次,代表了能够提供价值的东西)
2、软件的静态视图。
语境(设定场景的高层次图,包括关键的系统依赖和参与者)
容器(容器图显示了高层次的技术选择,容器如何分担职责、如何通信)
组件(组件图可以看到每个容器的关键逻辑组件及之间的关系)
类(这是一个可选的细节层次)
3、语境图能回答以下问题:
(1)我们构建的(或已经构建的)软件系统是什么
(2)谁会用它
(3)如何融入已有的IT环境
4、容器图能回答以下问题:
(1)软件系统的整体形态是什么样的
(2)高层次技术决策有哪些
(3)职责在系统中如何分布
(4)容器之间如何相互交流
(5)为了实现特性,作为一个开发者,我需要在哪里写代码
5、容器间的通信通常是进程间通信。
交互的目的(如读写数据、发送报告)
通信方法(如Web服务、远程方法调用、消息服务)
通信方式(如同步、异步、批量、两阶段提交等)
6、语境图展示的软件系统是一个盒子,而容器图是打开盒子展示里面的东西。
(1)让高层次的技术选择更明确
(2)展示了哪些容器之间有关联,以及他们如何沟通
(3)提供了一个放置组件的框架
(4)展示了高层次的语境图和通常很乱的组件图之间经常缺失的连接,组件图画的是整个软件系统中所有的逻辑组件
7、组件图可以回答以下问题:
(1)系统由哪些组件/服务组成
(2)在高层次上,系统如何工作是否清晰
(3)所有组件/服务都驻留在一个容器中吗
组件图展示了驻留在每个容器中的逻辑组件,展示了在高层次上将软件系统分解为职责不同的组件;展示了组件之间的关系和依赖;为软件开发的高层次预估和如何分解交付提供了一个框架。
8、明确技术选择。
(1)这个组件如何与运行在单独进程中的另一个组件沟通
(2)这个组件如何初始化,职责又是什么
(3)为什么这个进程需要和另一个进程沟通
(4)为什么这个组件要用X技术而不是Y技术实现
9、职责驱动设计和组件分解。
对于软件架构,一个重要的方面是理解软件系统的重要元素是如何结合在一起的,这意味着深入组件、服务或模块的层次,他们各自有一组特定的职责。组件是接口背后的一组相关行为,可以用一个或多个协作类实现。好的组件和好的类有一些共性,应该高内聚、低耦合、有良好定义的公共接口、良好的封装等。
10、用层封装代码。
如果你打开一个代码库,就会看到域类包、UI素材包、业务服务包、数据访问包、集成包等。
11、架构和设计软件并不需要UML工具。但如果你不使用工具,就需要明确地思考各个抽象层次之间的可追溯性、规约和一致性。