后端產(chǎn)品容易忽視的坑(二)

1 評論 6067 瀏覽 20 收藏 7 分鐘

編輯導(dǎo)讀:后端產(chǎn)品在工作中經(jīng)常會遇到一些坑,稍不留神就很容易“入坑”了。本文作者基于自己的工作經(jīng)驗(yàn),圍繞兩個小話題展開介紹,希望對你有幫助。

本文結(jié)合案例,聊兩個小話題:

  1. 異步處理機(jī)制,會給臟數(shù)據(jù)帶來可乘之機(jī)?
  2. 取“全部”,是否等同于遍歷所有枚舉值?

一、異步處理機(jī)制,是否會給臟數(shù)據(jù)帶來可乘之機(jī)?

1. 場景

【商品列表】,以導(dǎo)入的方式新增商品,是很正常的一個功能。作為資料一部分,商品的圖片,也可以導(dǎo)入。

方式就是在Excel錄入圖片的url地址。

機(jī)制就是:導(dǎo)入后,系統(tǒng)先打開地址,然后下載圖片;下載成功,再上傳到【商品列表】。

只是這個功能在機(jī)制上,往往要異步執(zhí)行。因?yàn)榻馕鰑rl的時間太長。

于是,異步的實(shí)現(xiàn)手法,就可能導(dǎo)致bug的光臨。案例如下:

2. 案例

和上述的場景相似,且規(guī)定了導(dǎo)入模板中,商品圖片是必須項(xiàng),所以未寫入圖片的時候商品數(shù)據(jù)不完整。

如果:

00:00的時候提交Excel,其中有商品編碼001。

當(dāng)時,檢查到商品編碼001在系統(tǒng)不存在,于是該數(shù)據(jù)等待異步執(zhí)行。

而就在00:01的時候,(另一)用戶手動創(chuàng)建了同一商品編碼001,創(chuàng)建的時候系統(tǒng)驗(yàn)重通過(因?yàn)镋xcel導(dǎo)入的那個001還沒執(zhí)行寫入)。00:02的時候Excel寫入成功。此時,系統(tǒng)就會出現(xiàn)兩個001商品編碼。于是導(dǎo)致數(shù)據(jù)重復(fù)。

這里一個隱藏的不合理?xiàng)l件:就是導(dǎo)入的數(shù)據(jù)中無圖片,則無資格參與去重。

這就是一個利用異步處理的時間窗,數(shù)據(jù)偷渡的現(xiàn)象。

3. 解析

這個失誤的原因本質(zhì)上,在于Excel的校驗(yàn)和執(zhí)行之間,拖的時間太長,或者說,寫入數(shù)據(jù)的時候沒做校驗(yàn)。但是產(chǎn)品經(jīng)理的需求到開發(fā)那里,這樣實(shí)現(xiàn)的開發(fā),沒測到位的測試,絕對是有的。

產(chǎn)品經(jīng)理的啟發(fā):

PRD中做提醒:

要盡量想在開發(fā)前面,因?yàn)殚_發(fā)也有不靠譜的。比如案例中的PRD,可以增加特別提醒,將可能的風(fēng)險暴露。

方案根源避免:

比如案例中,要求在Excel導(dǎo)入的時候,圖片未到位時,視為草稿狀態(tài)寫入數(shù)據(jù)庫,占住商品編碼的坑。那么,如果有同樣的商品編碼手動創(chuàng)建,就會當(dāng)場檢查到。從而避免異步的時間窗,引入不法數(shù)據(jù)。

二、取‘全部’與取每個枚舉值的差別

1. 背景

O2O平臺的門店商品,是商品編碼個數(shù)n,乘以門店個數(shù)m的矩陣。表達(dá)的意思是,將某商品,鋪貨到某個門店中。

若某場景下,n個商品要鋪貨到所有門店,以導(dǎo)入方式執(zhí)行。

那么導(dǎo)入Excel的表格中,就只需要錄入n行商品數(shù)據(jù),不必寫具體的門店,而是定義:門店為空的,即為全部門店。

從而將數(shù)據(jù)量降維,減輕用戶負(fù)擔(dān)。

2. 案例

用戶有1個商品,鋪貨到m個門店。那么導(dǎo)入表格中只寫一行,門店列為空:要求系統(tǒng)對該商品鋪貨到所有門店。

開發(fā)的實(shí)現(xiàn)機(jī)制就是,發(fā)現(xiàn)門店列為空,則抓取所有門店,挨個執(zhí)行鋪貨。

但是忽視一個問題:全部門店中,會有啟用和禁用的門店(甚至更多關(guān)系)。

門店禁用之后,在數(shù)據(jù)庫,還有這些門店與商品的綁定關(guān)系,只是前端頁面沒顯示。

有數(shù)據(jù),就有可能被新的邏輯運(yùn)算引用(所見非所得)。

那么方案中就要做啟用狀態(tài)的過濾。

那么問題就是:你定義門店列為空的邏輯,是否可靠。

3. 分析

正常情況下,業(yè)務(wù)不這么單純。用戶錄入指定門店的時候,一定是用戶看得到的。而為空的時候,默認(rèn)取全部,就意味著可能超出了用戶的可控范圍。

好比指定一個星球(火星、木星),和默認(rèn)全部星球(認(rèn)知邊界之外的星球無法把控),是完全不一樣的。

意識到這個問題之后,那么方案需要優(yōu)化:

方案一:

在默認(rèn)全部的基礎(chǔ)上,增加限制,比如全部啟用狀態(tài)的門店。

優(yōu)點(diǎn):從邏輯層面是安全可靠的。

缺點(diǎn):增加了一個非強(qiáng)邏輯的校驗(yàn),因?yàn)榭赡苻D(zhuǎn)眼這個門店就啟用了,那么又要重新處理。

方案二:

不允許用戶將門店列留空。

若用戶想對全部門店鋪貨,那么就錄入全部門店,用逗號隔開。即多個門店寫在一個單元格中。

類似的問題,在搜索項(xiàng)中也存在。比如搜索全部、該項(xiàng)不參與搜索、勾選全部枚舉值,在某些具體環(huán)境下,是三種完全不同的結(jié)局。

#專欄作家#

唧唧歪歪PM,公眾號:唧唧歪歪PM(ID:jjyypm),人人都是產(chǎn)品經(jīng)理專欄作家。書籍《后端產(chǎn)品經(jīng)理寶典》作者,藥學(xué)碩士轉(zhuǎn)行互聯(lián)網(wǎng)產(chǎn)品多年;熟悉跨境電商業(yè)務(wù),醫(yī)藥領(lǐng)域;擅長大型后臺體系,社交APP。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 比較落地的

    來自湖南 回復(fù)