如何讓開發(fā)明白,空≠0?
“空”和“0”在賦值上有完全不同的適用范圍,在一開始,產(chǎn)品端應(yīng)該格外注意字段的限制,能夠提高產(chǎn)品開發(fā)效率。
作為一個(gè)產(chǎn)品經(jīng)理,從來不會把“空”等同于“0”來看待,在寫原型的時(shí)候也不會特意強(qiáng)調(diào),這是“空”,不是“0”。
兩個(gè)毫不相關(guān)的東西,為什么要去解釋一遍無關(guān)性呢?就好比人和狗,為什么要去說明人不是狗,狗不是人?
直到產(chǎn)品驗(yàn)收時(shí),看到了那些0……
讓產(chǎn)品抓狂的0
案例1:月經(jīng)生育史
先來看個(gè)月經(jīng)史、生育史的例子。
醫(yī)生還未寫病歷,這些“0”就已經(jīng)默認(rèn)寫上了,這也就罷了,一個(gè)個(gè)刪除,然后保存;回頭一看,“0”全都出來了。
一下子崩潰了,問開發(fā):初潮0歲,你見過生下來就來大姨媽的嗎?月經(jīng)周期0天,你見過365天,天天來大姨媽的嗎?
開發(fā)小哥很委屈:我又不懂這些是什么意思。
想想這好像也不能怪他們,畢竟還是單身。
案例2:預(yù)約次數(shù)限制
這是微信預(yù)約的限制,用來限制每個(gè)微信id一天可預(yù)約的次數(shù)。
當(dāng)我打開設(shè)置時(shí),發(fā)現(xiàn)默認(rèn)值就是0,刪了保存還是0。這應(yīng)該有常識了吧,問開發(fā):所有人都不能預(yù)約,那預(yù)約功能的意義在哪?我要的是“空”,不是“0”。
開發(fā)小哥哥又委屈了:數(shù)據(jù)庫又不能存空,空就是0啊。
也確實(shí)是難為他們了,一方說我要空,一方又不讓為空。
案例3:積分規(guī)則設(shè)置
做過電商的朋友對積分都不陌生,消費(fèi)后贈送積分,再次消費(fèi)時(shí)抵扣積分。
當(dāng)我打開頁面設(shè)置時(shí),也是滿眼的0。問開發(fā):都是0,設(shè)置和不設(shè)置有什么區(qū)別?這功能都沒有用。
這回開發(fā)小哥哥有理了:既然“空”和“0”沒影響業(yè)務(wù),顯示著也沒問題啊。
好像挺有道理,怎么就隱隱透著些傻氣呢。
開發(fā)怎么看“空”
產(chǎn)品經(jīng)理眼里的“空”,怎么就成了開發(fā)眼里的“0”了呢?但是,也不是所有的空,都顯示成了“0”啊,比如填寫聯(lián)系人和聯(lián)系電話的地方,都沒有顯示0。
為此,我去采訪了一下開發(fā)小哥哥,發(fā)現(xiàn)了其中的原因。
每一個(gè)字段都是有一個(gè)類型的,常用的是:
- 字符型數(shù)據(jù):包括中文字符、英文字符、數(shù)字字符和其他ASCⅡ字符。就像上面的聯(lián)系人就是這種文本類型,可以輸入中文姓名。數(shù)據(jù)庫默認(rèn)值就是空字符串,即“”。
- 數(shù)值型數(shù)據(jù):只可由數(shù)字、小數(shù)點(diǎn)、正負(fù)號和表示乘冪的字母E組成,不能輸入中英文字符。就像上面的經(jīng)期就是這種數(shù)值類型。數(shù)據(jù)庫不能存空,必須存入一個(gè)確定的值,故開發(fā)常常把空存成0。
既然字符型數(shù)據(jù)能支持?jǐn)?shù)字,為什么不都存成字符型數(shù)據(jù)呢?不就沒有0的那個(gè)問題了嗎?
從開發(fā)角度來說,原因有好多,說個(gè)我們比較關(guān)注的:字符類型往往比數(shù)字類型占用更多的存儲,而更多的存儲空間消耗會導(dǎo)致查詢性能變慢,就是系統(tǒng)很卡。
為了使有限的存儲空間發(fā)揮最大的能效,我們有必要把字符類型和數(shù)值類型分開,那怎么做才能讓開發(fā)不直接把空當(dāng)0呢?
讓開發(fā)分清空和0的法則
明確數(shù)據(jù)類型
產(chǎn)品經(jīng)理是最熟悉業(yè)務(wù)的,每個(gè)字段可能填寫什么內(nèi)容,都會有一個(gè)深入的理解。那在寫原型的時(shí)候,就需要針對每個(gè)字段可填寫內(nèi)容的類型做個(gè)明確的標(biāo)識,哪些是文本,哪些是數(shù)值。
比如說上面的字段:
這樣至少能保證文本類型的地方不會出現(xiàn)0,下面重點(diǎn)關(guān)注數(shù)值類型就可以了。
明確數(shù)值范圍
我們會發(fā)現(xiàn),有的地方空=0是沒有問題的,比如說初潮,因?yàn)?不在數(shù)據(jù)范圍內(nèi),數(shù)據(jù)庫存了0前端不顯示出來就可以了,不會引起誤解。
但有的地方空=0就會發(fā)生錯(cuò)誤,比如說生育史里面的足月產(chǎn),意思是足月生育了幾個(gè)孩子,那填寫0是完全合理的;如果空就是0,那填了0也會被認(rèn)為是空。
我們可以給每個(gè)數(shù)值一個(gè)范圍,這樣開發(fā)在賦值的時(shí)候,就知道哪些值不能用了。
比如上面的字段:
明確空的定義
空其實(shí)是有很大的想象空間的,有時(shí)候代表無限大。比如說預(yù)約次數(shù)的顯示,不填就是不限制預(yù)約次數(shù),任意次都可以。
有時(shí)候代表未知。比如說足月產(chǎn),你沒法知道這個(gè)人到底生了幾個(gè)孩子,不能隨便給一個(gè)值。數(shù)據(jù)庫需要給這個(gè)未知賦一個(gè)值,但肯定不能是0了。這空值也不能保存進(jìn)去,在其他相關(guān)的地方顯示出來。
有時(shí)候就代表0。就像積分累積規(guī)則,0就代表沒有積分活動。
空具體的值不需要我們定義,但我們需要告訴開發(fā)這個(gè)空值的含義是什么。
比如說上面的字段:
可以和開發(fā)約定一個(gè)整體的規(guī)則,“空”=999999,999999是系統(tǒng)里面肯定不會出現(xiàn)的正常業(yè)務(wù)數(shù)據(jù),用這個(gè)代替不會出現(xiàn)像0那樣的異議。
當(dāng)然,一些特殊的字段,還需要單獨(dú)去處理,比如說預(yù)約次數(shù)限制,最大值就是999,空只能代表最大的999。
明確空回顯內(nèi)容
最后要和開發(fā)強(qiáng)調(diào)一點(diǎn):不管哪個(gè)功能下的“空”,不管“空”的含義是什么,也不管給“空”賦了什么值;既然是空,頁面上千萬別回顯出內(nèi)容來,千萬不要隨處可見的“0”。
我們要的就是空!
總結(jié)
空和0的問題,是產(chǎn)品很容易忽視的問題,卻是很容易和開發(fā)引起爭執(zhí)的問題。
我們在寫需求文檔的時(shí)候,需要格外注意數(shù)值型字段的取值范圍和空值含義。提前告知開發(fā),就能避免很多數(shù)據(jù)錯(cuò)誤的情況,提高產(chǎn)品開發(fā)質(zhì)量。
本文由 @辰陽 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于 CC0 協(xié)議
開發(fā)有時(shí),為了省事確實(shí)會這樣做。然影響又不大,不好說什么….
直接說空就是空,不能展示0,不就ok了嗎
太基礎(chǔ)了,字段數(shù)據(jù)類型和默認(rèn)值定義清楚是基本功
空即是色
笑出聲??
深有感觸
開發(fā)不明白?其實(shí)都是裝死而已,空和0的含義開發(fā)比你都清楚
帥
數(shù)值型類型為空可以用null,””和null的定義是不一樣的為什么非要用0代替?