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

25 | 实战二(上):针对非业务的通用框架开发,如何做需求分析和设计?

通用性
容错性
扩展性
性能
易用性
统计时间间隔
统计时间区间
统计触发方式
统计信息显示终端
统计信息显示格式
统计信息的类型
接口统计信息
技术人是否应该具备一些产品思维
应对复杂系统的设计实现
需要掌握的重点内容
系统设计图
最小原型
非功能性需求分析
隐藏的需求
功能性需求分析
设计思路
通用框架需求
课堂讨论
重点回顾
框架设计
需求分析
项目背景
非业务的通用框架开发,如何做需求分析和设计?

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

上两节课中,我们讲了如何针对一个业务系统做需求分析、设计和实现,并且通过一个积分兑换系统的开发,实践了之前学过的一些设计原则。接下来的两节课,我们再结合一个支持各种统计规则的性能计数器项目,学习针对一个非业务的通用框架开发,如何来做需求分析、设计和实现,同时学习如何灵活应用各种设计原则。
话不多说,让我们正式开始今天的内容吧!

项目背景

我们希望设计开发一个小的框架,能够获取接口调用的各种统计信息,比如,响应时间的最大值(max)、最小值(min)、平均值(avg)、百分位值(percentile)、接口调用次数(count)、频率(tps) 等,并且支持将统计结果以各种显示格式(比如:JSON 格式、网页格式、自定义显示格式等)输出到各种终端(Console 命令行、HTTP 网页、Email、日志文件、自定义输出终端等),以方便查看。
我们假设这是真实项目中的一个开发需求,如果让你来负责开发这样一个通用的框架,应用到各种业务系统中,支持实时计算、查看数据的统计信息,你会如何设计和实现呢?你可以先自己主动思考一下,然后再来看我的分析思路。

需求分析

性能计数器作为一个跟业务无关的功能,我们完全可以把它开发成一个独立的框架或者类库,集成到很多业务系统中。而作为可被复用的框架,除了功能性需求之外,非功能性需求也非常重要。所以,接下来,我们从这两个方面来做需求分析。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何进行非业务的通用框架开发的需求分析和设计。文章首先提到了项目背景,即开发一个能够获取接口调用统计信息并支持多种显示格式输出的框架。接着,对功能性需求和非功能性需求进行了详细分析。在功能性需求方面,文章列举了接口统计信息、统计信息类型、显示格式、显示终端等需求,并提出了隐藏的需求,如统计触发方式、统计时间区间和统计时间间隔。在非功能性需求方面,文章强调了易用性、性能、扩展性、容错性和通用性的重要性。通过详细的需求分析和设计思路,为读者提供了开发非业务通用框架的指导和思路。 在框架设计方面,文章提到了聚焦于一个简单的应用场景,基于此设计实现一个简单的原型的思想。通过实现一个最小原型系统,帮助理清更复杂的设计思路,为迭代设计提供基础。文章还分享了几个小技巧,包括画产品线框图、聚焦简单应用场景、设计实现最小原型、画系统设计图等,以简化、具体、明确问题,逐步推进设计开发。此外,文章还提到了产品设计方面的手段或概念在技术产品设计上的重要性,以及技术人员是否应具备一定的产品思维。 总的来说,本文通过需求分析和设计思路,为读者提供了开发非业务通用框架的指导和思路,并分享了简化设计思路的小技巧,以及产品设计概念在技术产品设计中的重要性。

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

全部留言(97)

  • 最新
  • 精选
  • progyoung
    老师,本文中的案例统计时间时对业务代码是侵入式的,有没有非侵入式的案例呀?

    作者回复: 可以使用类似spring aop 做到无侵入

    2019-12-30
    9
    31
  • Lyre
    复杂的系统设计,首先应该梳理出功能点,整理架构设计,画出架构设计图,有了总体的规划,做下去才更顺畅。对吗老师

    作者回复: 是的,先做设计,后写代码。先做顶层设计,再做细分设计。

    2020-01-06
    19
  • 北天魔狼
    一直没有做过关于统计和监控的项目,希望老师可以出一个小的MVP🙏🙏🙏

    作者回复: 39 40讲 会给出完善的代码

    2019-12-30
    4
    9
  • Flynn
    老师,后面有TDD相关的内容讲解和练习么

    作者回复: 有单元测试的讲解

    2019-12-30
    5
  • worthto
    Metrics 类的线程是一个单线程的模型,如果线程池使用多个线程,老师能否帮我们设计一款支持多线程并发的统计模型。

    作者回复: 😂 这不属于专栏学习的重点

    2020-04-27
    1
  • 波波
    老师,计算最大响应时间max应该是 响应时间减去请求时间吧,为什么代码中只用到了响应时间呢?

    作者回复: 好像这是两个概念啊,不用减啊

    2020-04-04
    1
  • 淤白
    打卡:用Java实现了文中案例。

    作者回复: 加油

    2020-11-23
  • 王先森
    案例统计时间时对业务代码是侵入式,针对php语言是可以有定时脚本去统计,大家还有什么其他的方式么?

    作者回复: java spring可以放到切面中进行~

    2020-05-22
  • 莫大-潇湘夜雨
    老师,案例选用hashmap来存储监控数据,因为涉及到并发访问, 是不是换成并发包更合适一些呢?

    作者回复: 是的,不过这是最小原型,我也讲到了可以暂时不用考虑并发问题

    2020-01-10
    2
  • JM
    这个例子里面每个接口程序块的开头和结尾都要加上timestamp,如果要统计成百上千个接口,是不是有更高效的方式呢?每个接口可能会隶属于不同的team,那这样是不是需要和多个team沟通合作,沟通协作成本很高啊。

    作者回复: 1. 我们可以通过切面的方式,在某一个地方统一加timestamp,而不用每个接口都加timestamp 2. 每个接口隶属不同team是什么意思呢?

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