View on GitHub

软件系统分析与设计指南

The documents about Software Analysis & Design Team Work

领域建模 - 对象状态

1、状态建模

1.1 为什么要状态建模

领域模型描述了问题域中事物及其之间的关系与量化的约束,我们需要进一步验证模型的有效性与完备性,管理这些事物的生命周期成为有效的方法 - 状态建模。它主要解决以下问题:

在软件分析与设计中,状态图是业务逻辑合理性分析的最重要工具。是设计分析师最常用工具!

1.2 UML 状态建模符号体系

状态图描述一个 事物或对象事件或消息 刺激产生 可见的状态(属性/属性组合) 的数据变化。

states-notation

绘图注意事项:

1.3 状态建模

应用场景:

工作步骤:

  1. 确定研究对象
    • 这是最难的!系统作为一个对象?所有对象?
    • 通常是客户关注的业务交易实体,如订单,凭证等
  2. 识别状态集合
    • I, F, S={S0…Sk}
    • 状态不一定是门的开或关闭这样简单属性,可能是属性复杂的组合
    • 事物中包含的 mode 和 state 属性
  3. 识别事件和变迁条件
  4. 合理性、完整性检查与逻辑分析
    • 终点的可达性
    • 悬挂状态
    • 循环分析(死循环条件与风险)
    • 路径分析(最短路径、关键路径、平均距离)

1.4 案例研究

1)simple digital watch

A simple digital watch has a display and two buttons to set it, the A button and the B button. The watch has two modes of operation, display time and set time. In the display time mode, hours and minutes are displayed, separated by a flashing colon.

The set time mode has two sub-modes, set hours and set minutes. The A button is used to select modes. Each time A is pressed, the mode advances in sequence: display, set hours, set minutes, display etc. Within the sub-modes, the B button is used to advance the hours or minutes once each time it is pressed. Buttons must be released before they can generate another event.

2)对 “Priests and Devils” 提出新的需求,在游戏中添加Help功能,用户点help,就自动完成目标移动。

提示:游戏初始状态为[PPPDDD]B-[],终止状态[]-B[PPPDDD],其中[]表示河岸、P表示Priest、D表示Devil、B表示Boat。

3)旅店的房间状态建模

1.5 与活动图的区别

几乎相同的符合形状与元素?

2、 面向资源的设计 - API 设计指南

2.1 为什么要掌握面向资源的设计

如果你熟悉领域模型的获取(例如:你完成了 Find Hotel 用例的领域模型和数据库设计),又计划用 VUE、React 或 Angular 做前端,面向资源的设计的设计就是你的大杀器了!

你需要掌握的知识:

2.2 资源

建议先阅读 RESTful HTTP in practice 中文翻译

上文内容比较陈旧,它较好描述领域模型与 web API 的关系,设计规范性请参考【实例】部分提供的 github、微软、google的标准

资源是REST中最关键的抽象概念,它们是能够被远程访问的应用程序对象。一个资源就是一个标识单位,任何可以被访问或被远程操纵的东西都可能是一个资源。

[不给盗链]请阅读原文

Figure 1: Example analysis model

分析模型(课程教程是领域模型、或对象模型)是识别资源的一个非常好的“切入点”。资源设计的主要驱动力是网络因素而不是对象模型。任何重要的资源都应该能够通过一个唯一的标识被访问。RESTful HTTP使用URI来识别资源。

2.3 实例

案例研究:

例如:Gmail API 服务实现了 Gmail API 并提供了 Gmail 的大部分功能。它有以下资源模型:

2.4 主要概念

主资源:领域模型是交易实体或主要对象。例如 Hotels,Orders, Customers。 通常是复数!例如:

https://api.xx.com/users

资源实例:一个资源的个体,由资源ID识别。例如:

https://api.xx.com/users/007-u1

子资源:主资源拥有的资源。通常由分析模型导航关系决定,导航范围控制在两级以内。例如:

https://api.xx.com/users/007-u1/orders

资源CRUD操作

使用 HTTP 操作实现:

如果要适应多种语言,请仅使用 GET 和 POST

资源缓存

当 GET 返回码 304 是表示客户端支持缓存的。在做大量数据传输时,要充分利用缓存。自己研究 heads

资源过滤操作

例如:

https://api.xx.com/hotels?city=?&start-date=?&...

资源投影操作

例如:

https://api.xx.com/hotels?projection=name,star,city,desc

资源分页操作

例如:

https://api.xx.com/hotels?page=2&per_page=100

资源跨域操作

必须带 callback 参数,返回 jsonp 格式数据。例如:

https://api.xx.com/hotels?callback=callbackproc

API 版本管理

App 应用认证管理

认证访问 API 的程序是合法的

2.5 定旅馆案例研究

2.6 使用设计工具与标准

为什么要使用工具?

标准 OpenAPI (请使用 Swagger 工具设计)

如何有效使用这些工具?

3、个人作业

练习资源:Asg-RH.pdf

使用 UMLet 建模

4、团队作业

团队作业要求:

  1. 1 检查第一个迭代内容与组织,规划第二个迭代
  2. 6.4 需要简述建模理由和方法
  3. 7.3 仅需要在线链接。链接到你发布的 API
  4. 8.2 可以参考网上 REST API 设计规范,请重新按自己的设计组织,并不断更新