[followme]如何写好软件设计文档实战系列-2_定期类业务

案例二:定期自动更新宝宝年龄

1.模块概述

本模块功能如下:

1.宝宝年龄更新;比如宝宝8月份注册时1岁,生日8月8号,那么2018-8-8更新为2岁;

2.模块设计

2.1.功能模块

2.1.1.定期更新宝宝年龄

宝宝信息表baby_info:

宝宝id  | 名称name | 年龄age | 生日birthday

1          | lucy          | 1            | 2016-8-8                (注:当前日期是2017-8-12)

方案一:

服务器端启动定时任务:

1)每天定时扫描baby_info表;

2)读取birthday字段,与当前日期比较;

3)如果当天(2018-8-8)是宝宝生日,则更新baby_info,age+1=2岁

点评:

此方案逻辑正确,实现简单,可以实现宝宝年龄每年正确更新。

评审意见:

1. 新手很容易想到这样的思路,一般就直接开始写代码实现了,并一边实现,一边去考虑实现难点了。比如:定时任务库,生日判断方法等,直接钻进实现去了。

2. 功能实现了,测试没有bug,这个任务就完成收工,也再也不会想起优化了。

3. 直到某一天数据库中宝宝数量突破万级,定时任务执行效率极低,这时想到需要优化性能;

4.优化性能时又想到方案了,分布式:多几台服务器,多几个定时任务,每个任务扫描2000个宝宝信息;好了思路OK了,开始代码实现,性能测试又OK,任务收工,满足的泡一杯咖啡。这是大部分程序员的缩影!

再点评:

感觉没有什么不对哦。

难道是:方案一设计时就考虑多任务多线程等;不必等后面性能问题暴露了再改;

其实不然,而是再收到任务需求时,就应该停下来好好思考下,莫急于编代码!

多一点思考和分析,好一点的方案才是好程序的根基。

功能分析:

1.宝宝信息表baby_info中的宝宝数量只会越来越多,逐条扫描必定会效率低下,很快会遇到性能瓶颈;

2.宝宝生日是2016-8-8,则1岁是2017-8-8,下一年是2018-8-8;也就是2017-8-8更新年龄1岁后,下一次生日就是2018-8-8;

lucy 2016-8-8   1岁2017-8-8  2岁2018-8-8

jane 2016-8-10  1岁2017-8-10  2岁2018-8-10

3.上面的分析有发现什么特点没有?

1)不同生日的宝宝,更新年龄不在同一天;也就是分布在365/366天里面;

2)每次生日更新都是下一年。

有没有触发你什么灵感?



评审改进:

方案二:

1.改进宝宝信息表baby_info:

宝宝id  | 名称name | 年龄age | 生日birthday | 下一次生日next_birthday

1          | lucy            | 1           | 2016-8-8       | 2018-8-8

2          | jane            | 1           | 2016-8-10     | 2018-8-10

2.宝宝注册时,初始化下一次生日日期;

3.启动定时任务:

1)每天定时从baby_info表中筛选去next_birthday等于当天的记录;

2)这些宝宝当天为生日,更新年龄age+1;

3)并计算出下一次生日日期,更新next_birthday;

点评:

新方案优势:

宝宝生日的更新分散到365/366天里面去了;定时任务执行只会扫描当天生日的宝宝,非当天生日的宝宝都过滤掉了,这样扫描的记录就少了很多。

至此评审结束。

结束语:

程序设计是一场逻辑思维的旅程,在code之前,停下脚步,好好思考,好好想想多个方案,写出来。

更好的程序,来源于更好的设计。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容

  • 案例一:幼儿园用户心理测评套餐设计方案 原始设计方案: 点评:原始设计方案,结构完整,实现方案功能OK。 会议评审...
    星矢2080阅读 1,142评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,085评论 25 707
  • 第44周回顾 计划内任务完成情况 整体说明(1) 数据说明工作部分计划内12件任务,完成了7件,取消5件。计划外一...
    易仁小生在进化阅读 333评论 0 1
  • 今夜噩梦惊醒的灵魂被空虚无限放大。 沉默伴随着失眠凝视着窗外, 薄雾笼罩的月色芳华。 寂寥的人啊还在苦海挣扎。 是...
    极恶小丑阅读 268评论 0 0