產(chǎn)品術(shù)語 | 開發(fā)口中的“寫死”是什么意思?
編輯導語:技術(shù)一定要寫死程序嗎?本文就一般什么情況下需要寫死代碼以及寫死代碼有什么優(yōu)缺點做了詳細闡述,一起來看看吧!
有個產(chǎn)品說:明明不寫死會有很多好處,不明白為什么技術(shù)一定要寫死程序。好家伙,程序員聽了都要被氣哭。
程序員并不知道要把什么功能寫活,寫死才是常態(tài)。如果所有的功能都要寫成動態(tài)的,就不是業(yè)務程序,而是像在開發(fā)什么新的編程語言了。
一般產(chǎn)品未寫明時,態(tài)度好的開發(fā)還會來問一下:這里要寫死嗎?如果開發(fā)不問的話,大概率就按照產(chǎn)品的需求來寫,也就是怎么方便怎么來了。
所以某個功能需要寫活,一定要說清楚,不然后面免不了一場撕逼大戰(zhàn)的。再說如果開發(fā)預判了你的需求,提前寫活了后端邏輯和前端頁面,萬一你沒有修改的需求就是浪費人力了。你可能還會怪開發(fā)代碼寫得慢,這就會造成項目延誤等后果。
那什么是寫死呢?
一、寫死定義
形容某個產(chǎn)品功能,被開發(fā)小哥哥直接用代碼死死釘成某個樣子,以不變應萬變,日常使用中你我都不可以通過配置來變化內(nèi)容。也可以說是讓開發(fā)小哥哥直接寫在代碼里,不是從數(shù)據(jù)庫讀取數(shù)據(jù)或者從接口拉取數(shù)據(jù),只限定一個固定常量,不接受變量。
常見例子:
“我希望老天爺能讓開發(fā)小哥哥寫死我的顏值up值”
“我希望老天爺能開發(fā)小哥哥寫死我的體重,無論我吃多少都不會改變該值”
二、一般什么情況下需要寫死代碼呢?
- 寫死雖然會有很多坑,但寫死成本非常低啊,既不用改數(shù)據(jù)庫也不用構(gòu)建接口,所以對業(yè)務/產(chǎn)品需求大概率不會發(fā)生變化的,采用寫死方案更優(yōu)
- 技術(shù)和技術(shù)之間約定好的東西,可以寫死,因為這是大家約定好的,開發(fā)肯定也不希望頻繁改動或者因為太靈活的配置導致各種問題
三、寫死的缺點
- 寫死意味著除非發(fā)下一個版本,否則這個數(shù)據(jù)不可更改。
- 產(chǎn)品功能和規(guī)則的變化可能是隨時的,原本的限制可能會變成日后的需求。
- 很多時候就是為了省事,很多邏輯
都被「寫死」在了代碼里,想改的時候通常來不及,這也是很多產(chǎn)品大鍋的來源。
所以在程序?qū)崿F(xiàn)的時候,程序員問是否要寫死,其實是探求這里是否會變化。如果不變,那就寫死。有寫死,那么就會有寫活,其實寫死和不寫死二者并不是互斥的,有的時候是要一起配合的,既要本地寫死,也要云端可控。
四、寫死與寫活的成本
- 不需要寫活的程序默認寫死,這才是常態(tài)。寫活程序的成本要遠遠大于寫死程序的成本,有時甚至數(shù)倍不止。
- 不寫死的話意味著這個地方的數(shù)據(jù)是可以變化的,一般我們都會在服務器端進行配置,由客戶端來進行拉取對應的參數(shù)再去使用。
- 把程序?qū)懟罹褪呛芏噙壿嫸家龀煽煽氐?,這個時候的工作量就無形之中拉長了時間,增加了時間的成本。
看到一個反諷為什么要寫死的生活案例:鐵軌的寬度為什么是固定寬度,如果可以拓寬一點的話,火車車廂就可以變寬了,這樣可以多一列座位,這得提高多少運力呀,春運也不用那么擠了呀。這么一想,是不是發(fā)現(xiàn)寫死并沒有那么不好,這就是約定好的寫死,為各方面節(jié)省了成本。
五、具體業(yè)務場景理解
關(guān)于寫死,可以看一下下面的goodcase和badcase,可以幫助我們更好的理解“寫死”這個術(shù)語。goodcase
往往App的底部tab欄,基本都是固定功能,每次都要展似的,這些都是default默認數(shù)據(jù),如果沒有者這份寫死的數(shù)據(jù),客戶端運行起來,底部就會沒有任何信息,要等網(wǎng)絡數(shù)據(jù)回來才顯示,或者無網(wǎng)絡時,就像bug一樣沒有任何展示。
所以default默認數(shù)據(jù)主要解決用戶體驗問題,無網(wǎng)絡或初次啟動時,給用戶隱喻這個App已經(jīng)在正常運行。當然,也有一些App是寫死和寫活兼容的,即本地存一份寫死數(shù)據(jù),等數(shù)據(jù)拉取到數(shù)據(jù)回來再展示寫活的數(shù)據(jù),也能保證用戶體驗。
badcase:
某平臺著急上線某個運營活動時,由于前端H5開發(fā)人員剛好在忙其他優(yōu)先級更高的需求,所以這個活動交給了客戶端開發(fā)。該活動是全場商品5折,客戶端同學為了方便,則對所有商品設置了固定折扣5折,并不是通過接口從服務器獲取的,而是直接本地寫死的。但開發(fā)為了方便測試不多花錢,把折扣設置成了1折,測試完成后,沒改過來,導致線上也是1折,上線后發(fā)現(xiàn)虧大發(fā)了。
最后采取的解決辦法:修改客戶端代碼,將折扣修改并完成測試后提交應用市場審核,為了覆蓋已發(fā)布的版本,只能開啟強制更新策略,對用戶體驗非常不友好。
六、總結(jié)
需求方一定要充分明確需求的目的,才能充分判定某業(yè)務是否要寫死,寫死和寫活的優(yōu)劣勢都很明顯,在權(quán)衡中做出正確的選擇很重要。
比如你要做修改用戶個人主頁背景圖的功能:
寫死:用戶只能從預設的10張圖片中選擇,而不能自己上傳字個人圖片到App中使用,開發(fā)完成就沒有其他的問題了。
寫活:用戶可以選擇自己喜歡的圖片做背景圖,那么開發(fā)時就必須考慮以下問題:
- 圖片格式要限定還是可以任意格式,要支持動圖嗎
- 圖片的尺寸要限定還是任意,任意尺寸的圖片還得做相應的裁剪處理,否則可能會出現(xiàn)變形/圖片未鋪滿等體驗不好的情況
- 圖片上傳后還得在后臺建立一個數(shù)據(jù)庫的功能,下次啟動還得自動讀取用戶最后設置的背景圖
- 圖片上傳后,還得建立審核系統(tǒng),否則用戶上傳不合規(guī)圖片會導致App下架
…
程序?qū)懰朗莻€大大減少開發(fā)工作量的方法,但是很不利于后期App的更新和拓展,比如后面基于商業(yè)化變現(xiàn),還想針對背景圖做付費或者活動獲取等運營模式。
需求業(yè)務是不斷變化的,當前業(yè)務在考慮長遠發(fā)展的同時考開發(fā)工作量,基于這些做出性價比最高的選擇,你就能清楚什么情況應該寫死/寫活了。
本文由 @西瓜姐姐 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Pexels,基于 CC0 協(xié)議
寫得很好,通俗易懂
學習,之前一只覺得寫活好。
作為一個前端,對我來說,既可以寫死又能寫活的狀態(tài),你不告訴我我肯定寫死,畢竟寫死不用考慮太多。
哈哈,這篇文章有意思,語言很生動很接地氣,給作者贊一個。
喔嚯,代碼寫死即用戶不能靈活修改,不過也了解到了新的知識點。
也許這就是能更新和不能更新的區(qū)別?看來無論什么都是需要能進步的