循環(huán)類業(yè)務(wù)處理的「增、刪、改、查」
在處理很多業(yè)務(wù)時(shí),有時(shí)會(huì)碰到“循環(huán)”這種特殊業(yè)務(wù)處理。例如:一個(gè)循環(huán)任務(wù),IOS上的日歷循環(huán)計(jì)劃,工作日鬧鐘等等。本文從四個(gè)方面對(duì)循環(huán)業(yè)務(wù)展開介紹,希望對(duì)你有用。
這里就來剖析下,『循環(huán)』事務(wù)的相關(guān)業(yè)務(wù)邏輯處理方案。
本文闡述的『循環(huán) 』等同于『重復(fù)』。
一、循環(huán)實(shí)際需求
部分業(yè)務(wù)在實(shí)際使用時(shí),想要實(shí)現(xiàn)定期重復(fù)的場(chǎng)景。
例如,用戶制定了一個(gè)每周二的提醒事項(xiàng),或者是想建一個(gè)每周六健身的計(jì)劃清單,每隔兩月的1號(hào)繳納電費(fèi)等費(fèi)用。
這些需求都是『場(chǎng)景固定,時(shí)間循環(huán)往復(fù)』。
二、循環(huán)是什么
百科對(duì)其的定義是:事物周而復(fù)始地運(yùn)動(dòng)或變化。
具體上要結(jié)合業(yè)務(wù)點(diǎn),例如循環(huán)計(jì)劃、重復(fù)提醒。其目的就是為了讓一個(gè)周期性的事務(wù),能夠在僅做一次的情況下,在定好規(guī)則后,可以按周期出現(xiàn)。
三、循環(huán)規(guī)則
一個(gè)完整循環(huán)的周期=開始點(diǎn)+周期+結(jié)束。
開始點(diǎn)通常是某一個(gè)具體的日期。
常見的循環(huán)周期的方式主要包括:日、周、月、年,有的產(chǎn)品還出現(xiàn)了『艾賓浩斯』周期。
疊加了結(jié)束的循環(huán)周期,也就限定了此循環(huán)周期的時(shí)間長度。
不同的周期,所產(chǎn)生的具體規(guī)則細(xì)節(jié)不同。
例如:以『周』為周期的話,需要指定是周幾,具體可見下表。
X是循環(huán)開始點(diǎn);Y標(biāo)識(shí)所選次數(shù);Z為截止日期。
清楚了循環(huán)的本質(zhì),接著就是要結(jié)合業(yè)務(wù),處理業(yè)務(wù)的循環(huán)數(shù)據(jù)。
四、處理循環(huán)的數(shù)據(jù)
任何信息化事務(wù)的主要操作類型無非是『增、刪、改、查』四類。
1. 『增』:雙向處理
循環(huán)數(shù)據(jù)應(yīng)該少占用資源空間,所以用時(shí)間換空間。每次循環(huán)事務(wù)的展示,都是動(dòng)態(tài)組織的結(jié)果。若是用空間換時(shí)間可能帶來影響:空間消耗大;實(shí)際查詢效率也不高。
可以想象一下,若是每次設(shè)置一個(gè)循環(huán),就根據(jù)循環(huán)規(guī)則創(chuàng)建一條數(shù)據(jù),假若設(shè)置了個(gè)每天循環(huán)的計(jì)劃,光一個(gè)月的話都可能多達(dá)30條。這還僅是此業(yè)務(wù)的一條循環(huán)方案,要是多條呢?所以當(dāng)業(yè)務(wù)具備『循環(huán)』時(shí),業(yè)務(wù)的數(shù)據(jù)應(yīng)該還是獨(dú)自保留的,僅是和循環(huán)子表建立關(guān)聯(lián)。
在新增數(shù)據(jù)時(shí),就進(jìn)行雙向處理:在循環(huán)表上記錄著循環(huán)的規(guī)則內(nèi)容,而業(yè)務(wù)表則記錄業(yè)務(wù)數(shù)據(jù)主體。
2. 『查』:虛實(shí)結(jié)合
由于循環(huán)業(yè)務(wù)的數(shù)據(jù)是分開處理的,采用的是【時(shí)間換空間】的方式。所以在展示循環(huán)業(yè)務(wù)的時(shí)候,查詢的原則是:程序化組織,邏輯上判定,展示頁優(yōu)化。
程序化組織:利用程序去向兩個(gè)表讀取數(shù)據(jù),然后虛擬化出來相關(guān)的循環(huán)點(diǎn)。虛擬化是指根據(jù)循環(huán)規(guī)則判斷某日是否該有數(shù)據(jù)展示,若有,則根據(jù)業(yè)務(wù)表組織出一條虛擬數(shù)據(jù)。
例如:在1月1號(hào)制定了每天循環(huán)的事務(wù),在2號(hào)這天查看時(shí),也能看到此條事務(wù)數(shù)據(jù),但實(shí)際上這條數(shù)據(jù)是通過程序拼裝出來的。
邏輯上判定:除了依靠程序拼裝點(diǎn),還需邏輯檢驗(yàn)比對(duì),虛擬化的點(diǎn)是否有實(shí)例化過。(實(shí)例化見下文)
展示頁優(yōu)化:簡(jiǎn)單來說,就是用戶在客戶端查看時(shí),是看不出和那些真實(shí)的業(yè)務(wù)數(shù)據(jù)的差別,看起來以及使用起來都感覺在操作實(shí)際存在的數(shù)據(jù)。
3. 『改』:實(shí)例和重塑更新
對(duì)于循環(huán)類的事務(wù),更新的方式主要是兩類:僅更新當(dāng)前,更新當(dāng)前及后續(xù)。
僅更新當(dāng)前:在循環(huán)體中的某一時(shí)間點(diǎn),僅需要更新當(dāng)前的情況。例如:用戶制定了一個(gè)每周二循環(huán)的事務(wù)清單,在第3次執(zhí)行時(shí),當(dāng)天事務(wù)繁多,此清單想刪掉其中一條事務(wù),但是后面的暫時(shí)不想更改,那就需要更新當(dāng)前。
因?yàn)橛行?shù)據(jù)點(diǎn)是虛擬的,所以在進(jìn)行更新當(dāng)前時(shí),就需要將其進(jìn)行實(shí)例化,也就是新增一條,時(shí)間歸屬于當(dāng)前時(shí)間點(diǎn)的業(yè)務(wù)數(shù)據(jù)。這也就是上文提到的邏輯上判定,在實(shí)際展示這一時(shí)間點(diǎn)的數(shù)據(jù)時(shí),僅展示這一實(shí)例化的點(diǎn)即可。
我們可以把循環(huán)事務(wù)想象為一個(gè)點(diǎn),通過循環(huán)規(guī)則,它演變?yōu)橐欢尉€段。在循環(huán)中途對(duì)循環(huán)業(yè)務(wù)進(jìn)行的操作,都是對(duì)線段的操作。
更新當(dāng)前及后續(xù):從當(dāng)前點(diǎn)開始,后面的循環(huán)內(nèi)容發(fā)生了改變。這種就需要對(duì)于循環(huán)做新增,正所謂“一刀兩段”。新產(chǎn)生的循環(huán)就是重塑的循環(huán)。
4. 『刪』:“反常態(tài)”操作
正常的業(yè)務(wù)在進(jìn)行刪除時(shí),不是進(jìn)行數(shù)據(jù)的移除,就是進(jìn)行數(shù)據(jù)的假刪處理,數(shù)據(jù)不會(huì)出現(xiàn)因?yàn)椤緞h除】反而增加的情況,但是對(duì)于『循環(huán)』的業(yè)務(wù)可能就要區(qū)別對(duì)待了。
循環(huán)事務(wù)的刪除和它的更改一樣,也是具備兩項(xiàng)操作:僅刪除當(dāng)前,刪除當(dāng)前及后續(xù)。
刪除當(dāng)前及后續(xù):這個(gè)很直白,就是從某一處開始,直接截?cái)唷叭拥簟薄?/p>
但是,【僅刪除當(dāng)前】可就不好操作了。可能有人會(huì)想到刪除當(dāng)前,直接在線段上“一刀兩段”把那個(gè)特殊點(diǎn)扔掉即可。我們假設(shè)這種方式叫截?cái)?看下截?cái)喾绞綆淼膶?shí)際業(yè)務(wù)變化。
看樣子,采用截?cái)嗟姆绞?,再進(jìn)行更新操作也不會(huì)有啥影響。那假如把一段循環(huán),在中途刪掉兩個(gè)點(diǎn)。例如:從1月1日到1月10日每天循環(huán)的計(jì)劃,3日和5日因?yàn)樾菹ⅲ槐貓?zhí)行了。
當(dāng)刪掉了1月3日和1月5日的事務(wù)后,然后把1月4號(hào)也刪掉,再回到1月2號(hào)想調(diào)整下循環(huán)事務(wù)內(nèi)容時(shí),會(huì)發(fā)現(xiàn)6號(hào)到10號(hào)的循環(huán)事務(wù)內(nèi)容不跟隨變化了。這也違背了上述『查』的展示頁優(yōu)化。
而如果采用【補(bǔ)點(diǎn)】的方式,也就是刪除單點(diǎn)時(shí),加一個(gè)覆蓋點(diǎn),用于遮蓋。
上述的問題也就不存在了,但是這也造成了一個(gè)問題,明明是【刪除】操作,結(jié)果數(shù)據(jù)庫里的數(shù)據(jù)反而增多了,資源空間占用更多了。
這時(shí)就可以用到遞歸優(yōu)化,在處理具體循環(huán)事務(wù)時(shí),判定是否為唯一點(diǎn),若是直接進(jìn)行數(shù)據(jù)清除。對(duì)于有子集的則遞歸化處理,以來減少資源空間浪費(fèi)。
五、總結(jié)
循環(huán)類事務(wù),難點(diǎn)在于對(duì)于數(shù)據(jù)的處理上。理清楚具體業(yè)務(wù)的實(shí)際場(chǎng)景,以來定奪具體采用的處理方式。
上述是一個(gè)通式,部分也是個(gè)例。若是想完美解決,就要理清線段和點(diǎn)的關(guān)系,這里不再贅述。
本文由 @29號(hào)同學(xué) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于 CC0 協(xié)議
作者你好,有兩個(gè)地方?jīng)]有看懂,能解釋下嗎?
1.在刪除那一節(jié),僅刪除當(dāng)前的邏輯里,為何中途刪掉兩個(gè)點(diǎn),更新循環(huán)及后續(xù)時(shí),3部分就更新不到了
2.事務(wù)優(yōu)化邏輯不夠清晰,部分無法理解,能否解釋下流程圖里幾個(gè)字段的意思
1.在一段循環(huán)內(nèi)刪除某點(diǎn)時(shí),是相當(dāng)于切割,1段刪除1個(gè)點(diǎn)后,相當(dāng)于拆成了【1】【2】?jī)啥危渲小?】還是原本的編號(hào)循環(huán)段僅是變短了,【2】再刪除一個(gè)點(diǎn)就由【2】變成了【2】【3】,【2】從屬于【1】,【3】從屬于【2】,例如有個(gè)Root屬性用來記錄他們?cè)镜母讣?jí)是哪個(gè),他們從屬于【1】,這樣再更新父級(jí)節(jié)點(diǎn)時(shí),才能更新到由于切割產(chǎn)生的子集。
2.流程圖那部分字段可以忽略,是循環(huán)體的實(shí)體屬性,具體的可以按照公司業(yè)務(wù)來設(shè)定
讓我想起了釘釘?shù)娜罩咎嵝压δ埽诩倨诤驼?qǐng)假時(shí)也會(huì)提醒今日未提交日志,真是太坑了
可能因?yàn)獒斸斚到y(tǒng)的假期和請(qǐng)假,是做在其他系統(tǒng)表中,然后不好跨業(yè)務(wù)讀取,然后就沒有剔除。
當(dāng)然如果把考勤類加入考慮的話,整體邏輯運(yùn)算量可能加大,這可能也是一方面原因
原來如此,謝謝大佬的分享,這篇文章是我在這個(gè)平臺(tái)看到的少數(shù)硬核產(chǎn)品文章之一,望今后可以持續(xù)更新為盼
哈哈哈,謝謝支持,不過還不是大佬,『硬核』這個(gè)詞不錯(cuò)
我還是挺喜歡技術(shù)型或者運(yùn)營型的,那些轉(zhuǎn)型或者小廠的產(chǎn)品,沒看清問題結(jié)構(gòu)就上來夸夸其談,或者各種自以為是不客觀的分析結(jié)論,一點(diǎn)核心競(jìng)爭(zhēng)力都沒有,頂多只是個(gè)文員。
那么好的文章,沒人看?這屆pm 真該重置一下了,反而是一群人研究擺攤
可能切入點(diǎn)較小,不涉及此類業(yè)務(wù)的pm看起來就會(huì)云里霧里。更奇怪的是 這篇文章居然被定位到了【業(yè)界動(dòng)態(tài)】搞不懂人人都是產(chǎn)品經(jīng)理判定邏輯
你口氣是真的大,一棒子一敲一堆人,任何行業(yè)和職位都存在良莠不齊的情況。
然后呢,你想說我指的就是你嗎
了
一副高高在上 自以為是的樣子,你是什么牛馬?