需求分析案例:餐厅排队叫号送券需求

news2024/12/24 2:19:22

本文介绍一个餐饮系统的排队送券需求,针对该需求进行边界划分和技术实现方案的过程。

1、需求提出

还是前文说的互联网餐饮系统,提供了餐厅排队叫号能力。
因为有些热门餐厅,吃饭的人太多了,就出现了很多排队时间长,放弃排队就餐,转去其它餐厅。
为了挽留这些用户,餐厅提出需求,要为排队等待时间长的用户,发放优惠券。
需求主要内容:顾客排队超过30分钟还没就餐,送一张8折优惠券。

2、设计与实现

该餐饮系统,已经拆分有2个模块:

  • 排队叫号服务,负责发号、排队、叫号业务
  • 营销活动服务,负责发券、票券核销等业务

2.1 初始设计

研发人员初步设计了一下,实现步骤:

  • 顾客取号,把该取号信息,投递到30分钟的延迟队列;
  • 叫号后,会更新该排队号的状态为已就餐或已过号;
  • 延迟队列的消费者,消费到消息时(这个号过了30分钟)
    • 如果该号状态不是排队中,则德育该消息;
    • 如果是排队中,调用营销服务的发券API,进行发券。
      在这里插入图片描述

经过评审,问了研发一个问题,这个需求是不是固定的?有没有可能进行变化?
研发说目前收到的需求就是:
顾客排队超过30分钟还没就餐,送一张8折优惠券
后面会不会变化,怎么变化没了解过。

2.2 业务梳理

我们评估了一下,不同的餐厅不太可能是同一个时间方案,也有可能赠送不同的优惠;
再找产品经理沟通,产品答复,目前收到的用户需求就是这个,未来不排除变化可能,
如果等待时间变化,比如时间由30分钟改成40分钟,要改排队的代码并发布;
如果赠送优惠变动,比如送券类型修改成其它的券,也要改排队的代码并发布;
那么排队业务和送券业务,不应该放在一起啊,创建券、发券、核销这些都应该是营销服务的业务;
于是,重新梳理的业务边界,并设计流程如下:
在这里插入图片描述
评审没有其它问题,无论营销活动怎么变化,排队这边都是不用改动的,
按这个流程排入迭代并进行开发去了。

2.3 进一步业务梳理和优化

事后我对这块业务复盘,发现还有1个当时未考虑到的细节点:

  • 如果顾客参与了排队,但是未就餐就走了,此时是否要送券?
    经评估不应该送,于是需求变更为就餐时,超过30分钟才送券,避免用户薅羊毛啊,哈哈。

这样就不需要延迟队列了,只需要监听排除服务的事件,就可以完成需求了,技术的复杂度又降低了!!!

  • 数据需要在队列里等待30分钟,有时排查问题会比较麻烦,需要队列检索工具;
  • 如果就餐40分钟才送券,变成需要多个不同时间的延迟队列,更复杂了;
  • 延迟队列有数据积压风险,顾客多了,延迟队列可能内存暴了;

这个需求变更唯一的缺点,就是用户在等了30分钟时看不到券,一定要就餐才能看到,
这一点,完全可以通过用户引导说明来解决。
于是,最新的设计流程如下:
在这里插入图片描述

注1:上图中,营销服务需要调用排队服务的API,查询排队信息,这个API是现成的,因为排队服务本身就要提供API给客户端查询排队等待信息,含排队时长、前面还有多少号等等。
注2:这里有一个思考点,在营销服务那边把开始排队的消息保存下来,后面叫号就餐时,查本地的排队信息,计算时间,是不是可以?
答案是否,原因如下:

  • 排队可能被取消,那营销服务还要消费取消事件,逻辑变复杂了,可能还有其它变动,比如号给另一个人,可能手工修改排队开始时间;
  • 营销多了一份排队存储数据,营销服务这边还要考虑后续的排队数据清理工作。

3、小结

精通业务

深入理解业务,能正确识别业务边界,比如这个排队送券的需求:

  • 送券是一种营销活动,本质上与排队业务无关,类似于支付成功要发货,但是发货并不属于支付业务;
  • 对营销活动的创建、管理、分配、核销,都应当是营销的业务范畴;
  • 排队信息,包括排队数据是否有效(被取消)、排队时长这些都是排队服务的业务范畴;
  • 营销服务需要设计活动,必然要了解一部分排队业务,如排队消息类型、排队时长,但是能不介入太深就不要,比如这个业务里,可以不关心排队取消信息。

单一职责,减少耦合

从实现的角度看,在排队服务里实现送券能力,能快速开发和实现,
但是最大的缺点是业务耦合:排队掺杂了营销活动的业务,不利于后续的修改、扩展,
比如:排队改成45分钟送券、或者30分钟送果盘,而不是券;比如要区分性别,男士和女士送不同的优惠等等;

最重要的问题点:营销服务不是核心服务,是增值服务,而排队服务应该是正常的基础服务,外围服务的故障,不应该影响到基础服务;
而耦合业务的话,如果送券业务出问题,可能导致排队业务也受影响,故障概率高,用户都无法排队,可能就跑了;
而如果营销服务故障,餐厅还可以通过线下打折处理来解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SkyWalking链路追踪-技术文档首页

SkyWalking 文档中文版(社区提供) (skyapm.github.io)https://skyapm.github.io/document-cn-translation-of-skywalking/ SkyWalking-基本概念 SkyWalking链路追踪是一个用于分布式系统的性能监控工具,它帮助开发人员了解系统中各组件之间…

【如何训练一个中译英翻译器】LSTM机器翻译模型部署之ncnn(python)(四)

ncnn:https://github.com/Tencent/ncnn 1、.h5模型保存为TFSaveModel格式 import tensorflow as tf from keras.models import load_model# 加载Keras模型 model load_model(encoder_model.h5)# 转换为SavedModel类型 tf.saved_model.save(model, TFSaveModel)2、…

ssm 图书借阅管理系统 【纯干货分享,免费领源码06780】

大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆的要求下,开发一款整体式结构的图书借阅管理系统&#xf…

5.44 综合案例2.0-矩阵键盘信息输入上传-OLED屏幕

综合案例2.0-矩阵键盘信息输入上传-OLED屏幕 案例说明1、应用场景2、M320矩阵引脚说明3、接线说明 搭建云平台环境1.添加设备2.创建设备类型3.功能定义(创建物模型) 代码1.更改MQTT信息 测试 案例说明 矩阵键盘输入信息显示在OLED显示屏上。按确定键可以…

Django 图书管理系统

一、功能及页面设计 二、页面展示 (1)首页 (2)注册 (3)登录 (4)普通用户登录 4.1查看图书页面 4.2查看图书详情页 4.3修改密码 (5)管理员登录 5.1添加图书 5.2添加图片 三、代码展示 因为代码太多不好一个个展示 所以需要源码的小伙伴可以找我要代码 感谢三连支持&#xff0…

云计算需求激增带来的基础设施挑战及解决方案

云计算的指数级增长迅速改变了我们消费和存储数字信息的方式。随着企业和个人越来越依赖基于云的服务和数据存储,对支持这些服务的强大且可扩展的基础设施的需求已达到前所未有的水平。 云计算需求的快速增长 我们的日常生活越来越多地被新技术所渗透。流媒体服务、…

剑指 Offer 29. 顺时针打印矩阵 / LeetCode 54. 螺旋矩阵(模拟)

题目: 链接:剑指 Offer 29. 顺时针打印矩阵;LeetCode 54. 螺旋矩阵 难度:中等 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入&#xff1a…

Fiddler Everywhere(TTP调试抓包工具) for Mac苹果电脑版

Fiddler Everywhere for Mac版是Mac电脑上的一款跨平台的HTTP调试抓包工具,Fiddler Everywhere for Mac能够记录客户端与服务器之间的所有HTTP(S)通信,支持对包进行监视、分析、设置断点、甚至修改请求/响应数据等操作。 适用于任…

2009年上半年 软件设计师 上午试卷2

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Golang GORM 模型定义

模型定义 参考文档:https://gorm.io/zh_CN/docs/models.html 模型一般都是普通的 Golang 的结构体,Go的基本数据类型,或者指针。 模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成&#x…

安全初级:字符编码

字符编码 字符编码:是一种映射规则,根据映射规则将字符映射成其他形式的数据在计算机中存储和传输。 常用的编码 编码制定时间作用ASCII1967表示英语及西欧语言GB23121980国家简体中文字符集,兼容ASCIIUnicode1991国际标准化组织统一标准字…

【C++】继承和多态高频面试题整理

文章目录 1. 选择题2. 问答题2.1 什么是多态?2.2 什么是重载、重写(覆盖)、重定义(隐藏)?2.3 多态的实现原理?2.4 inline函数可以是虚函数吗?2.5 静态成员可以是虚函数吗?2.6 构造函数可以是虚函数吗?2.7 析…

华为云零代码平台AstroZero新手操作指南-3分钟体验创建培训报名表

华为云Astro轻应用Astro Zero是华为云为行业客户、合作伙伴、开发者量身打造的低代码/零代码应用开发平台,提供全场景可视化开发能力和端到端部署能力,可快速搭建行业和大型企业级应用并沉淀复用行业资产,加速行业数字化。 在AstroZero上&am…

el-tabel导出excel表格

1、安装插件 npm install file-saver --save npm install xlsx --save 2、引入插件 import FileSaver from "file-saver"; import * as XLSX from xlsx; 3、在tabel中添加ref属性和导出方法 4、添加方法 exportExcel (excelName) {try {const $e this.$refs[repo…

DFS之剪枝与优化--小猫爬山

思路&#xff1a;对小猫的数量和车箱数进行bfs&#xff0c;一旦小猫的数量达到n&#xff0c;就统计ans的数量&#xff0c;如果当前车的剩余重量无法再承受任意一个猫的重量&#xff0c;那么我们将车辆数1来保证小猫能够下山。 #include<bits/stdc.h> using namespace std…

ChatGPT使用技巧和实践

在工作使用当中&#xff0c;需要使用到GPT&#xff0c;目前使用的是浏览器端的WeTab。 下面是给AI的提问和交互 请写出HashMap和Hashtable的区别 HashMap和Hashtable是Java中两种常用的哈希表实现&#xff0c;它们在功能和使用上有一些区别。线程安全性&#xff1a;HashMap是…

如何利用在线培训考试系统提升员工技能?

在如今竞争激烈的商业环境中&#xff0c;不断提升员工的技能和知识变得至关重要。为了满足这一需求&#xff0c;越来越多的企业开始采用在线培训考试系统。借助这种系统&#xff0c;企业可以以有效和高效的方式提供培训&#xff0c;并确保员工能够学到最新的知识和技能。 1. 灵…

3.2 队列

定义: 队列是一种插入元素只能在一端进行, 删除元素只能在另一端进行的线性表. 所谓队列是线性表, 是指队列的逻辑结构属于线性表, 只不过在操作上加了一些约束. 队列可以插入元素的一端叫做队尾(Rear), 可以删除元素的一端叫做队头(Front). 队列是一种先进先出的结构. First I…

vue创建脚手架项目启动

vue创建脚手架项目&启动 1、创建项目2、运行项目 1、创建项目 vue create vuecli-demo说明这里使用vue2项目 2、运行项目 cd vuecli-demo yarn serve访问 http://localhost:8080/

springboot()—— 集成redis

1、新建一个springboot项目 2、添加redis依赖包 可以在新建项目的时候就选上 也可以建完项目以后手动导入pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </d…