今天我给大家讲一个故事 如果雷同,那很正常
很久很久以前, 我们开发了一个团队协作工具,叫 Infoboxme https://www.infoboxme.com/ 类似 worktile teambition trello todoist 简单的理解就是有一个表叫做 tasks,实现对该表的增删改读操作。
数据库是 Mysql Web 端是 前后台分离的模式。 移动端是 原生的 iOS 和 Android 后端是 Rails
神对我们说, 移动端必须支持离线模式, 离线的时候,可以创建 Task。 做地铁的时候,经常离线。 神啊,离线的时候,干点别的不好吗,非创建 Task 感冒?
(神一样的需求) (神一样的产品) (神一样的解决方案) (就是这么被神出来的)
Web 端创建 Task 的时候, 同步调用后台 API, 可以立即获取到 API 的返回值,其中包括新的 Task 的 ID。 之后 Web 端用这个 Task 的 ID,来实现查询,修改,删除等操作。 (从此以后他们过上了幸福的生活...)
移动端创建 Task 的时候, 异步调用后台 API,因为需要支持离线模式, 后面接着,还要进行其他操作,比如, 创建 Task 的 Comment 删除 Task 修改 Task 等等 此刻无法立即获取 API 的返回值!!!拿不到 Task 的 ID,怎么办??? (完蛋了) (幸福的生活 木有啦) (下面也木有了........) (突然之间,2 个移动端程序员,1 个晕到了,1 个石化了)
凭我们多年的行医经验, 我们决定使用 UUID(户口本上曾用名是 GUID) 方案如下
移动端创建 Task 的时候, 自己负责生成 Task 的 UUID。 拼装 API 参数的时候,把 Task 的 UUID 放进去。 异步调用后台 API 如果 API 创建 Task 失败,移动端可以利用 Task 的 UUID,把本地的 Task 数据删除。 如果 API 创建 Task 成功,移动端可以利用 Task 的 UUID,实现查询,修改,删除等操作。 (30 秒之后,2 个移动端程序员复活了) (从此以后他俩过上了幸福的生活...)
力胜 灿玉 庆文 葛伟 周豪 淼程 还有神一样的存在 老蒋
致我们在云飞思的青春