面对一个需求,我们该如何设计?

57 阅读4分钟

需求落地 → 数据分析 → 最小可行设计 → 风险分析 → 分步解决

1️⃣ 明确需求,最小化数据

  • 目的:先抓核心,避免做无关的功能

  • 方法

    1. 明确前端会传哪些数据

      • 比如血透记录:患者 ID、生命体征、透析参数等
    2. 明确系统需要处理哪些数据

      • 数据库存储结构、字段、格式
    3. 保证最小可行性(MVP)

      • 只做核心业务逻辑,例如记录、保存、生成报表

核心思想:程序员就是对数据进行处理,所以第一步必须清楚“数据长什么样、怎么流转”。


2️⃣ 分析可能的问题

在保证最小可行功能后,需要思考可能会遇到的问题:

  • 数据冲突:多用户同时修改同一条记录
  • 重复数据:同一条数据被多次提交
  • 数据缺失:前端传参不完整
  • 异常情况:网络中断、服务异常

先解决业务最重要的问题,再考虑边缘场景。


3️⃣ 设计方案

  • 步骤化

    1. 核心流程设计

      • 明确数据从前端到数据库的完整流程
      • 确定验证逻辑、存储逻辑、输出逻辑
    2. 业务规则设计

      • 权限控制、字段合法性、逻辑校验
    3. 异常处理设计

      • 数据冲突解决方案:乐观锁/悲观锁
      • 重复数据处理:唯一约束/去重逻辑
    4. 高并发设计(可选)

      • 如果核心流程已经稳定,再考虑缓存、消息队列、分布式锁等

重点是 一层一层解决问题,先保证核心业务逻辑安全,然后再考虑性能和并发。


4️⃣ 风险与优化

  • 高风险点

    • 并发写入 → 数据覆盖或丢失
    • 长时间处理 → 前端等待超时
    • 大量生成报表 → 内存占用过高
  • 优化策略

    • 使用消息队列异步处理耗时任务
    • 分批处理大数据
    • 对核心数据加锁/版本号检查

5️⃣ 总结方法论

  1. 拿到需求 → 明确最小可行数据
  2. 分析数据流 → 数据从哪里来、怎么处理、怎么存
  3. 思考潜在问题 → 重复、冲突、异常
  4. 先解决核心问题 → 再考虑边缘和高并发
  5. 迭代优化 → 性能、可扩展性、容错

核心思想: “从数据出发,一步步解决问题” ,每一步都清楚为什么而做,不跳步。

举例

现在有一个需求,需要做医院的血透设备与患者的排班管理,横坐标有每天的时间,纵坐标有机器,需要将实现能够将患者拖到对应的二位数组里面的一个小格子里面,它能够对应当天的时间和设备。

第一步

我们首先分析他的最小化数据是什么样子的。

一般情况发送的最小化数据,每个格子对应的是

{
    患者id
    设备id
    时间id
    
}

我们只需要将这些数据保持到数据库就行了,然后后期需要查找的时候就将他们查找出来,返回给前端就可以

第二步

分析可能出现的问题

比如患者重复排班一天内,患者时间重复排版,患者和设备重复排班。

比如高并发条件下进行对患者的增删改查,我们需要考虑并发情况下,患者的排版数据,因为他们操纵的是一个共享资源。我们下一步想是加锁还是事务,锁的话是乐观锁还是悲观锁,可能会带来哪些问题。

以及如何避免一个数据被多次修改,导入导出遇见网络波动如何解决,如何保证数据的强一致性和可靠性

第三步

针对第二步可能出现的问题,进行解决,可以用一些熟悉的技术栈,明确核心业务逻辑流程针对性的处理任务

第四步

针对第三步的一些解决方案进行优化,比如可以汇总一些,如果想要解决某个业务场景可以用哪些技术来解决

例如需要异步做某些操作

线程池还是消息队列

要做数据强一致性

用事务,还是消息队列异步+重试+延迟+ACK确信来保证可靠,还是加锁,加什么锁,并发量有多大