首页 如何进行面向分析、设计和实现
文章
取消

如何进行面向分析、设计和实现

面向对象分析、设计和实现有哪些要点

  1. 根据需求描述分析有哪些类
  2. 职责划分(进而识别出有哪些类)
  3. 设计类,包括类有哪些属性,类之间该如何交互(组合、继承和实现)
  4. 零件有了(类),如何组装成可执行的程序呢?

接口鉴权

还是以接口鉴权设计为例,根据前面得到的可落地的需求描述依次进行分析,需求描述的流图展示如下:

划分职责(有哪些类)

如何划分,按照需求描述将其中涉及的功能点一个个列出来,根据功能点职责是否相近,操作属性是否相同,判断是否将其归为同一个类,比如针对上面的需求描述图:

  1. 拼接 URL、用户名、时间戳和密码,并加密成 token,再将 token、用户名和时间戳拼接到 URL 中并发送到微服务端
  2. 微服务端解析 URL,得到 token、用户名、时间戳
  3. 根据时间戳比较当前时间,判断请求是否过期,否则拒绝请求调用
  4. 请求没有过期,根据用户名取出密码,并再次生成 token,并判断两个 token 是否一致,否则拒绝请求调用

上面是需求描述流图的文字描述,下面分析功能点:

  1. 把 URL、用户名、密码、时间戳拼接为一个字符串;
  2. 对字符串通过加密算法加密生成 token;
  3. 将 token、用户名、时间戳拼接到 URL 中,形成新的 URL;
  4. 解析 URL,得到 token、用户名、时间戳等信息;
  5. 从存储中取出用户名和对应的密码;
  6. 根据时间戳判断 token 是否过期失效;
  7. 验证两个 token 是否匹配;

综上:

  1. 2,4,6,7等都是对 token 进行操作,分别有 token 加密,token 是否失效,验证 token,
  2. 1,3,4 是与 URL 相关的,包括对 URL 的拼接和解析
  3. 5 是从数据库取出用户名和密码

因此可将需求描述建模成这几个类:AuthToken、Url 和 CredentialStorage

类的属性和方法

按照上面总结的操作,设计出方法和属性即可

类之间的交互关系

  1. 泛化,即继承
  2. 实现,即接口和实现类之间的关系
  3. 组合
  4. 依赖

其中组合和依赖的代码表示形式没有什么区别,不过 A 组合 B 来说,B 是无法独立存在的,就像翅膀不能脱离鸟自身而存在,那样将没有任何意义

组装并执行

  1. 独立运行的程序:提供 main 函数入口或暴露接口
  2. 框架:封装并向外界暴露接口

面向对象实现

将上述设计翻译成代码

本文由作者按照 CC BY 4.0 进行授权

如何把粗糙的模糊的需求整理分析得到清晰的可落地的需求描述

设计原则