[followme]如何寫好軟件設(shè)計(jì)文檔實(shí)戰(zhàn)系列-2_定期類業(yè)務(wù)

案例二:定期自動(dòng)更新寶寶年齡

1.模塊概述

本模塊功能如下:

1.寶寶年齡更新;比如寶寶8月份注冊(cè)時(shí)1歲,生日8月8號(hào),那么2018-8-8更新為2歲;

2.模塊設(shè)計(jì)

2.1.功能模塊

2.1.1.定期更新寶寶年齡

寶寶信息表baby_info:

寶寶id ?| 名稱name | 年齡age | 生日birthday

1? ? ? ? ? | lucy? ? ? ? ? | 1? ? ? ? ? ? | 2016-8-8? ? ? ? ? ? ? ? (注:當(dāng)前日期是2017-8-12)

方案一:

服務(wù)器端啟動(dòng)定時(shí)任務(wù):

1)每天定時(shí)掃描baby_info表;

2)讀取birthday字段,與當(dāng)前日期比較;

3)如果當(dāng)天(2018-8-8)是寶寶生日,則更新baby_info,age+1=2歲

點(diǎn)評(píng):

此方案邏輯正確,實(shí)現(xiàn)簡(jiǎn)單,可以實(shí)現(xiàn)寶寶年齡每年正確更新。

評(píng)審意見(jiàn):

1. 新手很容易想到這樣的思路,一般就直接開(kāi)始寫代碼實(shí)現(xiàn)了,并一邊實(shí)現(xiàn),一邊去考慮實(shí)現(xiàn)難點(diǎn)了。比如:定時(shí)任務(wù)庫(kù),生日判斷方法等,直接鉆進(jìn)實(shí)現(xiàn)去了。

2. 功能實(shí)現(xiàn)了,測(cè)試沒(méi)有bug,這個(gè)任務(wù)就完成收工,也再也不會(huì)想起優(yōu)化了。

3. 直到某一天數(shù)據(jù)庫(kù)中寶寶數(shù)量突破萬(wàn)級(jí),定時(shí)任務(wù)執(zhí)行效率極低,這時(shí)想到需要優(yōu)化性能;

4.優(yōu)化性能時(shí)又想到方案了,分布式:多幾臺(tái)服務(wù)器,多幾個(gè)定時(shí)任務(wù),每個(gè)任務(wù)掃描2000個(gè)寶寶信息;好了思路OK了,開(kāi)始代碼實(shí)現(xiàn),性能測(cè)試又OK,任務(wù)收工,滿足的泡一杯咖啡。這是大部分程序員的縮影!

再點(diǎn)評(píng):

感覺(jué)沒(méi)有什么不對(duì)哦。

難道是:方案一設(shè)計(jì)時(shí)就考慮多任務(wù)多線程等;不必等后面性能問(wèn)題暴露了再改;

其實(shí)不然,而是再收到任務(wù)需求時(shí),就應(yīng)該停下來(lái)好好思考下,莫急于編代碼!

多一點(diǎn)思考和分析,好一點(diǎn)的方案才是好程序的根基。

功能分析:

1.寶寶信息表baby_info中的寶寶數(shù)量只會(huì)越來(lái)越多,逐條掃描必定會(huì)效率低下,很快會(huì)遇到性能瓶頸;

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.上面的分析有發(fā)現(xiàn)什么特點(diǎn)沒(méi)有?

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

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

有沒(méi)有觸發(fā)你什么靈感?



評(píng)審改進(jìn):

方案二:

1.改進(jìn)寶寶信息表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.寶寶注冊(cè)時(shí),初始化下一次生日日期;

3.啟動(dòng)定時(shí)任務(wù):

1)每天定時(shí)從baby_info表中篩選去next_birthday等于當(dāng)天的記錄;

2)這些寶寶當(dāng)天為生日,更新年齡age+1;

3)并計(jì)算出下一次生日日期,更新next_birthday;

點(diǎn)評(píng):

新方案優(yōu)勢(shì):

寶寶生日的更新分散到365/366天里面去了;定時(shí)任務(wù)執(zhí)行只會(huì)掃描當(dāng)天生日的寶寶,非當(dāng)天生日的寶寶都過(guò)濾掉了,這樣掃描的記錄就少了很多。

至此評(píng)審結(jié)束。

結(jié)束語(yǔ):

程序設(shè)計(jì)是一場(chǎng)邏輯思維的旅程,在code之前,停下腳步,好好思考,好好想想多個(gè)方案,寫出來(lái)。

更好的程序,來(lái)源于更好的設(shè)計(jì)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 案例一:幼兒園用戶心理測(cè)評(píng)套餐設(shè)計(jì)方案 原始設(shè)計(jì)方案: 點(diǎn)評(píng):原始設(shè)計(jì)方案,結(jié)構(gòu)完整,實(shí)現(xiàn)方案功能OK。 會(huì)議評(píng)審...
    星矢2080閱讀 1,207評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,634評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,167評(píng)論 25 708
  • 第44周回顧 計(jì)劃內(nèi)任務(wù)完成情況 整體說(shuō)明(1) 數(shù)據(jù)說(shuō)明工作部分計(jì)劃內(nèi)12件任務(wù),完成了7件,取消5件。計(jì)劃外一...
    易仁小生在進(jìn)化閱讀 421評(píng)論 0 1
  • 今夜噩夢(mèng)驚醒的靈魂被空虛無(wú)限放大。 沉默伴隨著失眠凝視著窗外, 薄霧籠罩的月色芳華。 寂寥的人啊還在苦海掙扎。 是...
    極惡小丑閱讀 311評(píng)論 0 0

友情鏈接更多精彩內(nèi)容