画图工具:
OmniGraffle:https://www.omnigroup.com/download/
用例图
从用户的角度而不是从开发者的角度来描述需求,分析产品的功能和动态行为。
基本元素
用例
关联关系
参与者与参与者间的泛化关系:
比如腾讯用户,包括微信用户和QQ用户两部分,但是使用腾讯业务时,只需要是腾讯用户即可。
此时,可以采用泛化关系,采用三角空心箭头作为指向。
参与者与用例间的关联关系:
参与者与用例间是简单的关联关系,一个参与者可以有着多个用例。
用例与用例间的泛化关系:
用例之间可以存在泛化关系,比如常见的支付,可以选择微信支付、支付宝支付等等,但是这个操作就是支付。
泛化关系采用三角空心箭头。
用例与用例间的包含关系:
包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。
- 通常可以这么理解,由基础用例向复杂用例转换的过程。
但是最终被参与者直接操作的还是基础用例。
包含关系的图形为虚线箭头加
<<include>>
,箭头指向复杂用例。
用例与用例间的扩展关系:
扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。
当特定条件出现时,该扩展用例的行为才会被执行。
扩展关系的图形为虚线箭头加上
<<<exclude>>>
,箭头指向基础用例。
简单案例
类图
泛化关系:在代码中体现为继承关系,设计上用空心箭头实线表示。
实现关系:在代码中体现在接口和实现关系,设计上用空心箭头虚线表示。
关联关系:在代码中体现为两个类之间存在语义上的关系,体现在类之间存在的隐约关系。
- 关联关系常用于数据库表的设计,与数据库范式相对应。
1、单向关联:
学生可以拥有书籍,学生知道书籍的存在,但是书籍无需知道学生的存在,学生可以拥有多本书籍,因此从学生指向书籍关联。
设计上用箭头实线表示。
2、双向关联:
- 学生知道老师的存在,老师知道学生的存在。
设计上用实线表示。
聚合关系:特殊的关联关系,体现整体和部分的关系,设计上用空心菱形实线箭头表示。
部门不存在,员工仍然可以存在,员工离职,部门仍然存在。
- 体现的是0和n,整体和部分,整体不存在,部分仍然可以存在。
组合关系:特殊的关联关系,和聚合关系类似,体现整体与部分关系,设计上用实心菱形实现箭头表示。
- 公司和部门关系体现在公司不存在,则部门也不存在了,前者掌握整体的生命周期。
体现在0和0、1和n,整体不存在,则部分不存在,整体存在,则部分存在。
依赖关系:没有直接的关系,仅仅在代码运行期间,产生的依赖,如将A类中间的时间属性赋值到B类中的时间属性。
- A类中调用类中类型为B类的属性,A类中调用的方法,需要用到B类的信息等。
设计上用箭头虚线表示。箭头指向方为被调用方。
架构图
架构大致可以分为4类:
业务架构、应用架构、数据架构和技术架构。
整体逻辑关系如下:
业务架构
使用一套方法论/逻辑对产品(项目)所涉及到的业务进行边界划分。
- 熟悉业务是关键。
比如做一个团购网站,需要把商品类目、商品、订单、订单服务、支付、退款等进行清晰划分。
而业务架构不需要考虑诸如用什么技术开发、并发大怎么办、选择什么样的硬件等等。
应用架构
它是对整个系统实现的总体上的架构,需要指出系统的层次、系统开发的原则、系统各个层次的应用服务。
例如,下图就将系统分为数据层、服务层、通讯层、展现层,并细分写明每个层次的应用服务。
数据架构
是一套对存储数据的架构逻辑。
它会根据各个系统应用场景、不同时间段的应用场景 。
- 对数据进行诸如数据异构、读写分离、缓存使用、分布式数据策略等划分。
数据架构主要解决三个问题:
- 第一,系统需要什么样的数据。
- 第二,如何存储这些数据。
- 第三,如何进行数据架构设计。
技术架构
应用架构本身只关心需要哪些应用系统,哪些平台来满足业务目标的需求。
- 而不会关心在整个构建过程中你需要使用哪些技术。
技术架构则是应接应用架构的技术需求,并根据识别的技术需求,进行技术选型。
- 把各个关键技术和技术之间的关系描述清楚。
技术架构解决的问题包括:
- 纯技术层面的分层、开发框架的选择、开发语言的选择、涉及非功能性需求的技术选择。