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

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

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

如何进行面向对象设计?

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

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

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

全部留言(175)

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

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

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

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

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

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

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

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

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

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

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

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

    3
    2
  • WolvesLeader
    大佬,我想问一下,怎么改成提供token的服务呢

    作者回复: 没怎么看懂

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

    作者回复: 总结的到位

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

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

  • 高源
    老师整理完整代码学习一下

    编辑回复: 你可以看下其他同学的答案

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