设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123425 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

14 | 实战二(下):如何利用面向对象设计和编程开发接口鉴权功能?

提供一个执行入口,可能是一个main()函数或一组API接口
保留四个关系:泛化、实现、组合、依赖
UML统一建模语言中定义的类之间的关系
进行过滤筛选
识别功能点中涉及的名词作为候选属性
过滤筛选出真正的方法
识别需求描述中的动词作为候选方法
根据功能点职责相近,操作同样的属性,归为同一个类
根据需求描述,罗列功能点
欢迎在留言区交流和分享设计思路
不同人对类的划分、定义、类之间交互的设计可能不同
软件设计的自由度很大
面向对象设计的环节包括划分职责、定义类及其属性和方法、定义类与类之间的交互关系、将类组装起来并提供执行入口
面向对象设计的产出是类
面向对象分析的产出是详细的需求描述
在实际工作中,往往是在脑子里或草纸上完成面向对象分析和设计,然后边写边思考边重构
严格按照顺序执行各个步骤并不现实
软件开发是一个迭代、修修补补、不断重构的过程
将类组装起来并提供执行入口
定义类与类之间的交互关系
定义类及其属性和方法
划分职责进而识别出有哪些类
课堂讨论
重点回顾
辩证思考与灵活应用
面向对象编程
面向对象设计
如何利用面向对象设计和编程开发接口鉴权功能

该思维导图由 AI 生成,仅供参考

在上一节课中,针对接口鉴权功能的开发,我们讲了如何进行面向对象分析(OOA),也就是需求分析。实际上,需求定义清楚之后,这个问题就已经解决了一大半,这也是为什么我花了那么多篇幅来讲解需求分析。今天,我们再来看一下,针对面向对象分析产出的需求,如何来进行面向对象设计(OOD)和面向对象编程(OOP)。

如何进行面向对象设计?

我们知道,面向对象分析的产出是详细的需求描述,那面向对象设计的产出就是类。在面向对象设计环节,我们将需求描述转化为具体的类的设计。我们把这一设计环节拆解细化一下,主要包含以下几个部分:
划分职责进而识别出有哪些类;
定义类及其属性和方法;
定义类与类之间的交互关系;
将类组装起来并提供执行入口。
实话讲,不管是面向对象分析还是面向对象设计,理论的东西都不多,所以我们还是结合鉴权这个例子,在实战中体会如何做面向对象设计。

1. 划分职责进而识别出有哪些类

在面向对象有关书籍中经常讲到,类是现实世界中事物的一个建模。但是,并不是每个需求都能映射到现实世界,也并不是每个类都与现实世界中的事物一一对应。对于一些抽象的概念,我们是无法通过映射现实世界中的事物的方式来定义类的。
所以,大多数讲面向对象的书籍中,还会讲到另外一种识别类的方法,那就是把需求描述中的名词罗列出来,作为可能的候选类,然后再进行筛选。对于没有经验的初学者来说,这个方法比较简单、明确,可以直接照着做。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用面向对象设计和编程开发接口鉴权功能。首先,文章讲解了面向对象设计的步骤,包括划分职责、定义类及其属性和方法等。通过针对鉴权功能的实例,详细阐述了如何根据需求描述识别出相关类,并设计其属性和方法。文章强调了在设计类时需要考虑业务模型的完整性和未来需求的准备。此外,还介绍了面向对象设计在复杂需求开发中的应用方法,以及模块划分和识别类的套路。总的来说,本文通过实例详细解释了面向对象设计的思路和方法,对于开发人员理解面向对象设计和编程具有一定的指导意义。文章还提到了UML统一建模语言中定义的类之间的六种关系,以及如何将类组装起来并提供执行入口。最后,文章强调了在实际工作中,面向对象设计和编程是一个迭代、修修补补、不断重构的过程,需要灵活应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(176)

  • 最新
  • 精选
  • 斜杠青年
    置顶
    生成Token的算法可以用不可逆的Hash算法吗?例如MD5或是SHA?

    作者回复: 可以的,我就是用的不可逆的

    2019-12-09
    5
    8
  • 大大。
    争哥:设计了一个最顶层的 ApiAuthencator 接口类,为什么要设计出一个顶层的接口,虽然是面向接口编程,但是写成接口,意味着还会有其他的不同实现吗,如果有其他不同的实现,那么接口中的第二个参数的ApiRequest也不一定会适用不同的那个实现的传参,不知道说明白没有

    作者回复: 你说得很好,多谢指出啊,确实没必要搞个接口,ApiRequest的设计也依赖了具体的url实现,所以也不是很通用。

    2019-12-04
    5
    66
  • ThinkingQuest
    ApiAuthenticator接口的两个方法,都声明为返回void, 用Exception来控制token过期或不合法,这样好吗? token过期或不合法,在业务上应该是一种正常的,需要程序逻辑分支来处理的情形吧, 用throw runtime exception的方式来处理, 感觉上等于是把exception用于控制执行流程了。 关于这个,不知道应该怎么考虑。

    作者回复: 嗯嗯,你说的也对,那应该用boolean值作为返回值吗?那携带的信息就很少呀,只有true、false,不知道失败的原因。我觉得选择exception就是一种设计上的权衡。

    2020-08-29
    8
  • 瑞泉
    王争老师,代码是在这个地址吗?https://github.com/wangzheng0822/codedesign,是空的

    作者回复: 是的 还没空整理 稍等一阵子吧

    2019-12-16
    6
    5
  • grey927
    王老师,你好,我有个问题,针对:AuthToken中,isExpired()方法,这里返回的是布尔类型,那么,如果我传的是 - 错误的token - 正确的token但是过期 这两类都会判断成false,那么我怎么知道我的token是格式问题还是过期问题呢?

    作者回复: isExpired()只用来判断是否过期,match()用来判断是否错误

    2020-07-25
    3
  • unreal
    有个问题,ApiRequest叫法虽然更加通用,但实际创建接口命名还是依赖实现了吧,都是基于url的,还是我理解问题?

    作者回复: 多谢建议,你说的没错,ApiRequest确实还是依赖了url

    2019-12-07
    3
    2
  • 航哥很帅
    面型对象设计主要分为4个步骤: 1.根据需求设计需要的类; 2.确定类中的属性和方法,确定属性一般根据需求分析中的名称,确定方法一般根据需求分析中的动词; 3.确定类和类之间的关系,这些关系一般包括:泛化(继承)、实现、组合、依赖; 4.将类封装起来并提供执行的入口,这个入口就是这段代码运行起来的入口。

    作者回复: 总结的到位

    2020-11-13
    1
  • tt
    本讲中的面向对象分析和面向对象设计在阅读源码的时候可以使用么?就是先感动源码的整体设计,让后自顶向下的剖析源码

    作者回复: 先了解整体结构,再了解细节,思路是对的。

    2019-12-04
    1
  • WolvesLeader
    大佬,我想问一下,怎么改成提供token的服务呢

    作者回复: 没怎么看懂

    2020-11-29
    2
  • 兔嘟嘟
    看了几遍还是没懂,AuthToken类为什么构造函数要传入一个token,token不应该是类内生成的吗?以及如果已经通过构造函数获得了一个token,那么create函数又有什么作用?

    作者回复: 既支持外界生成好token,传递进来,创建AuthToken,比如从客户端传来的token,我们在后端包裹成AuthToken继续处理。也支持直接根据基础数据升成AuthToken,也就是create函数的作用

    2020-06-22
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部