設計模式系列·王小二需求歷險記(一)

子路發表於2017-03-28

前言

以小說的筆法寫的設計模式系列文章,你絕對看得懂![首發於公眾號:"聊聊程式碼"]

設計模式系列·王小二需求歷險記(一)
設計模式系列·王小二需求歷險記(二)
設計模式系列·封裝、繼承、多型
設計模式系列·初探設計模式之王小二的疑問
設計模式系列·Facade模式之MVC的煩惱
設計模式系列·Adapter 模式之如何優雅的使用別人的輪子
設計模式系列·類爆炸之Bridge模式
設計模式系列·工廠方法模式之 Code Review
設計模式系列·抽象工廠模式

------華麗的分割線------

0x1 不斷變化的需求

需求總是在變化的”,在無數次與產品經理的”需求大戰“中,小二對這句話深有體會。

這不,前些天,小二就經歷了一件欲哭無淚的事情...

0x2 產品經理的需求

產品經理走到小二面前:“小二,我們需要給年會員傳送簡訊,你多長時間能搞定?”

小二沉思了一會,拍拍胸脯:“沒問題,不就是傳送簡訊嘛。一週內搞定”。

0x3 程式導向的開發

拿到需求後,小二就快速的對需求拆分了步驟:

  1. 在資料庫中獲取所有的會員;
  2. 獲取所有的年會員的資訊;
  3. 按照註冊時間排序;
  4. 依次給這些會員傳送簡訊。

好了,需求的實現,拆分的如此簡單明瞭,下一步就擼起袖子開始幹唄!
經過一週的努力,明天終於要上線了,小二內心中滿滿的都是成就感。

“等等,小二,傳送簡訊的事,需求要變一下...”
"啥?明天就上線了,你告訴我要變需求?有沒有搞錯?"

“小二,這個需求確實緊急,沒有辦法。我們除了給年會員傳送簡訊外,還需要傳送微信。你諒解下,幫幫忙,我也是確實沒有辦法...”
"唉,好吧,就這一次,下不為例!"

剛剛寫好的812行程式碼,又要重新修改...

經過一個晚上10小時的加班,小二終於搞定了,程式碼從之前的812行變為了1300行...

專案如期上線,小二也鬆了口氣,但最近整晚的加班確實吃不消了。

小二回過頭來想想:“這產品經理每一次的需求變化,我都得更改我的整個指令碼或整個函式。這樣太容易出錯了,有沒有好點的辦法,不讓我這麼痛苦?...”

0x4 模組化

小二忽然靈光一閃:“與其寫成一個龐大的函式,為什麼不把程式模組化呢?下次變化的時候,那我只需要更改我這個模組就可以了。這不是更好理解與維護嗎?”

小二內心竊喜,就這麼幹!

於是,小二將整個傳送訊息的過程拆分成了不同的函式,不同的模組。

 //1、獲取年會員的資訊[包括mobile、email、微訊號...]
 function get_year_vip(){}
 //2、按照註冊時間排序
 function sort_year_vip(){}
 //3、傳送訊息($user_info為使用者資訊,$content為訊息內容)
 function send_message($user_info,$content){}複製程式碼

那麼,當我需要從傳送簡訊變為傳送簡訊和郵件的時候,我只需要更改send_message()這個函式就可以了。good job!

0x5還不夠靈活

在牛人云集的公司,小二想去請教下C哥,看看有沒有更好的解決辦法。

聽完小二的描述,C哥說到:“嗯。從一大坨程式碼到模組化,程式變得更好理解和維護了,不錯不錯。”

聽到C哥的讚賞,小二高興極了,瞬間從之前低落的心情變得彩虹滿天飛。

“不過,你這個還不夠靈活。”

“還不夠靈活?”

“是啊。比如傳送訊息模組,我現在需要傳送微信。但是簡訊、郵件的內容是字串,微信的內容是陣列。那這個send_message()函式是不是就不能用了?"

”你這麼一說還真是“

”很明顯,模組化可以幫你寫出更加容易理解和維護的程式碼,但是,模組化並不能幫助你寫出能應付所有變化的程式碼。“

”嗯...是的“

”並且,函式還有一個問題。如果有很多地方對你的函式有依賴,在使用你的函式(你或許不知道別人在使用你的函式)。那麼,你對這個函式一更改,也會間接的對其他地方產生bug。這就是強耦合帶來的弊端。“

”對,對!C哥說的太對了!那麼,如何去解決呢?“

欲知後事如何,請關注公眾號“聊聊程式碼”,讓我們一起聊聊“左手程式碼右手詩”的事兒。

設計模式系列·王小二需求歷險記(一)

相關文章