產(chǎn)品舉例:如果我們要做一個芒果TV后臺管理系統(tǒng)谆棱,簡單的方式和復(fù)雜的方式分別怎么來做呢?
一逢防、簡單系統(tǒng)設(shè)計方式——需求驅(qū)動設(shè)計
針對簡單的后臺產(chǎn)品龄广,我們通常采用需求驅(qū)動設(shè)計(Request-driven design,以下簡稱RDD)宰掉。
1呵哨、概念
所謂需求驅(qū)動設(shè)計,是指我們在設(shè)計后臺時轨奄,根據(jù)上級孟害、運營、市場挪拟、客服挨务、前端產(chǎn)品等需求方所提的具體需求,直接進行產(chǎn)品架構(gòu)、功能設(shè)計耘子。這種設(shè)計方式簡單快捷果漾,與我們做前端產(chǎn)品思路球切、方式相同谷誓,對于很多做前端產(chǎn)品的同學(xué)而言,這種方式是最容易理解和掌握吨凑。
2捍歪、設(shè)計流程
3、流程拆解
(1)明確目標(biāo)
任何一個產(chǎn)品的萌芽鸵钝,往往是因為一句話糙臼,一個問題,或領(lǐng)導(dǎo)的一個idea恩商,而這些起因变逃,就是我們的產(chǎn)品目標(biāo),這些目標(biāo)有時很模糊怠堪,但對于系統(tǒng)產(chǎn)品揽乱,這個目標(biāo)都是很明確的,明確的業(yè)務(wù)場景下粟矿,XX用戶產(chǎn)生的明確需求凰棉。例如我們要做芒果TV,分別有APP陌粹、web撒犀、PC、TV四個端掏秩,就需要有一個統(tǒng)一的管理后臺或舞,對前端進行支撐,運營人員能夠?qū)?nèi)容進行維護蒙幻。
(2)需求分析
明確了方向映凳,接下來就需要做需求調(diào)研。
第一步:窮舉用戶角色
進行需求調(diào)研時杆煞,需要先找用戶角色魏宽,再找需求。
清晰地列出使用此系統(tǒng)的用戶角色决乎,以用戶角色為劃分維度進行調(diào)研队询。因為后臺產(chǎn)品不同于前端,不同的用戶角色需求差異很大构诚,甚至風(fēng)馬牛不相及蚌斩,而每種角色對應(yīng)的用戶都是這個系統(tǒng)的目標(biāo)用戶,并不存在所謂的核心用戶和潛在用戶一說范嘱,這些用戶都是重要的送膳,都需要滿足他們的需求员魏。例如,使用芒果TV后臺管理系統(tǒng)角色包括運營叠聋、產(chǎn)品經(jīng)理撕阎、公司管理者、審核員碌补。
第二步:需求調(diào)研
調(diào)研方式——深度訪談
與前端產(chǎn)品不同虏束,后臺產(chǎn)品的用戶在現(xiàn)實生活中離我們很近,很容易就能接觸到厦章,這個時候就不要用調(diào)查問卷這種大覆蓋面的方式了镇匀,一是用戶基數(shù)沒有那么大,二是后臺需求基本不需要做定量分析袜啃,無需通過這種方式去挖掘需求汗侵。所以直接與用戶交流、訪談是最快速有效的方式群发;
調(diào)研對象——關(guān)鍵人
我們的訪談對象晰韵,需要盡可能滿足資深、直接使用也物、有話語權(quán)三個條件宫屠,因為這種關(guān)鍵人所提出的需求會更加全面、具體且有深度滑蚯,能夠清楚的解釋為什么要有這個功能浪蹂,如果沒有會出現(xiàn)什么后果,還能巴拉巴拉一堆歷史故事告材,這種用戶就是完美的訪談對象坤次。這些被傷害過的人,知道心痛的滋味斥赋;
第三步:建立需求池
根據(jù)訪談內(nèi)容缰猴,建立需求池。例如疤剑,在對運營滑绒、產(chǎn)品經(jīng)理、公司管理者隘膘、審核員訪談后疑故,建立了以下表格
(3)結(jié)構(gòu)設(shè)計
將調(diào)研后的需求進行初步篩選過濾后,需要根據(jù)確定弯菊、高優(yōu)先級的需求纵势,歸納這一期后臺所需實現(xiàn)的功能模塊。
做功能模塊劃分,需要秉持一個重要原則:一個角色钦铁,一個模塊软舌,完成一件事。也就是一個具體的角色牛曹,能夠在一個功能模塊中完成他想完成的任務(wù)佛点。原因主要是以下兩點:
降低用戶記憶成本,提升操作體驗躏仇。你絕對不想為了做一件事恋脚,要在多個模塊跳轉(zhuǎn)、多個頁面點擊吧焰手,這個看起來對前端產(chǎn)品再正常不過的要求,后臺經(jīng)常沒有達到怀喉;
便于權(quán)限區(qū)分书妻。做系統(tǒng)產(chǎn)品,權(quán)限劃分永遠是重點關(guān)心的躬拢,將一個角色要進行的操作單獨作為一個模塊或模塊下的子欄目躲履,方便做權(quán)限設(shè)置;
同樣聊闯,劃分模塊后進行欄目劃分工猜,然后按照操作流程,從上至下排列菱蔬,就能得到以下產(chǎn)品結(jié)構(gòu)圖:
至此篷帅,簡單系統(tǒng)的產(chǎn)品需求設(shè)計階段就告一段落了,后續(xù)步驟拴泌,且看下回分解魏身。但既然說這種方式只適用于Easy模式,那一定是有原因的蚪腐。
4箭昵、不足
這種設(shè)計方式,用開發(fā)的行話說回季,是一種面向過程的設(shè)計方式家制。這種方式有一個專有名詞——貧血模型。
貧血模型有以下幾大致命缺點:
創(chuàng)建的對象不準(zhǔn)確泡一,直接影響產(chǎn)品和開發(fā)對業(yè)務(wù)的正確把握和擴展颤殴;
業(yè)務(wù)邏輯分散,業(yè)務(wù)難以復(fù)用瘾杭;
業(yè)務(wù)間耦合度高诅病,迭代及維護成本極高;
名詞定義不一致,開發(fā)與業(yè)務(wù)出現(xiàn)溝通問題贤笆。
二蝇棉、復(fù)雜系統(tǒng)設(shè)計方式——領(lǐng)域驅(qū)動設(shè)計
為了解決上述問題,同時應(yīng)對復(fù)雜的系統(tǒng)產(chǎn)品芥永,就需采用領(lǐng)域驅(qū)動設(shè)計(Domain-driven design篡殷,以下簡稱DDD)模式。
1埋涧、概念
領(lǐng)域驅(qū)動設(shè)計板辽,是指在一個具體的領(lǐng)域中,一種面向?qū)ο蟮脑O(shè)計方式棘催。例如劲弦,我們要做一個更大的芒果TV后臺管理系統(tǒng),以滿足更多角色的更多需求醇坝,那么這個系統(tǒng)就屬于一個具體的領(lǐng)域——視頻娛樂領(lǐng)域邑跪。在這個領(lǐng)域中,包含影片呼猪、演員画畅、訂單等對象,這些對象就是我們要面向的設(shè)計目標(biāo)宋距,而非直接根據(jù)需求做設(shè)計轴踱。
2、流程
3谚赎、流程拆解
在這種方式的流程中淫僻,增加了“建立領(lǐng)域模型”和“系統(tǒng)劃分”兩個環(huán)節(jié),其他環(huán)節(jié)與RDD相同沸版,就不再贅述嘁傀,現(xiàn)針對新增的兩個環(huán)節(jié)做說明。
(1)建立領(lǐng)域模型
此處的領(lǐng)域模型视粮,是一種簡化后的E-R圖细办。E-R圖是后臺開發(fā)在數(shù)據(jù)庫設(shè)計中通常會用到的一種模型,用來表示實際業(yè)務(wù)中各個實體及其關(guān)聯(lián)關(guān)系蕾殴,核心三要素是實體笑撞、聯(lián)系、屬性钓觉。如下圖中茴肥,長方形體現(xiàn)的就是實體,也就是實際業(yè)務(wù)中的各個概念荡灾;橢圓形體現(xiàn)的是實體包含的屬性瓤狐,類似概念下的各個字段瞬铸,菱形體現(xiàn)的是實體間的關(guān)系。
當(dāng)在需求設(shè)計階段時础锐,并不需要像做數(shù)據(jù)庫設(shè)計那么復(fù)雜的模型嗓节,我們需要創(chuàng)建的領(lǐng)域模型,就是要根據(jù)實際業(yè)務(wù)皆警,展現(xiàn)全部的實體及其關(guān)聯(lián)關(guān)系拦宣,無需屬性,避免在規(guī)劃階段陷入過深的細節(jié)信姓。
第一步:與領(lǐng)域?qū)<乙黄鹜宜恚崂韺嶓w
領(lǐng)域?qū)<遥侵笇@個領(lǐng)域非常熟悉的人意推,可以是業(yè)務(wù)人員豆瘫、老板、產(chǎn)品經(jīng)理等任何角色左痢。這個專家對領(lǐng)域內(nèi)的各種業(yè)務(wù)場景和各種業(yè)務(wù)規(guī)則非常清楚靡羡,有能力表達出系統(tǒng)該做成什么樣子,有哪些核心業(yè)務(wù)關(guān)注點俊性。
在本文的例子中,我們梳理的實體包括用戶描扯、影片定页、欄目、推薦位绽诚、演員典徊、導(dǎo)演、訂單恩够、運營活動等卒落,在這些實體概念里,就是一個個的具體對象蜂桶,例如演員里有劉亦菲儡毕、劉德華。每個實體要求能用文字精確的扑媚、沒有歧義的描述其涵義以及包含的主要信息腰湾,同時每個實體定義要完全獨立,概念上不能有交叉或模糊的界線疆股。
第二步:梳理關(guān)聯(lián)關(guān)系
確定了實體费坊,就需要建立實體的聯(lián)系,標(biāo)識實體間的對應(yīng)關(guān)系旬痹。
實體聯(lián)系:
直接關(guān)聯(lián):實體間直接關(guān)聯(lián)附井,在系統(tǒng)中需手動建立聯(lián)系的實體讨越;
間接關(guān)聯(lián):根據(jù)實體圖,能夠通過間接關(guān)系找到唯一對應(yīng)實體永毅。通過間接關(guān)聯(lián)關(guān)系把跨,往往可以通過多條路徑找到同一具體實體,如果出現(xiàn)不同路徑找到不同目標(biāo)卷雕,那就需要重新檢查關(guān)聯(lián)關(guān)系是否正確节猿;
對應(yīng)關(guān)系:
1對1(1:1):1對1關(guān)系是指對于實體A與實體B,A中對象至多與B中一個對象有關(guān)系漫雕;反之滨嘱,在實體B中的每個對象至多與實體A中一個對象有關(guān)系;
1對多(1:N):1對多關(guān)系是指實體A與實體B中至少有N(N>0)個對象有關(guān)系浸间;并且實體B中每一個對象至多與實體A中一個對象有關(guān)系太雨;
多對多(M:N):多對多關(guān)系是指實體A中的每一個對象與實體B中至少有M(M>0)個對象有關(guān)系,并且實體B中的每一個對象與實體A中的至少N(N>0)個對象有關(guān)系魁蒜。
關(guān)聯(lián)建立原則:
關(guān)聯(lián)盡量少囊扳。實體間的復(fù)雜的關(guān)聯(lián)容易形成實體關(guān)系網(wǎng),這樣對于我們理解和維護單個實體很不利兜看,同時也很難劃分實體與實體之間的邊界锥咸;
化繁為簡。在建立關(guān)聯(lián)時细移,需要挖掘關(guān)聯(lián)關(guān)系的限制條件搏予,如果存在,那么最好把這個限制條件加到這個關(guān)聯(lián)上弧轧,往往這樣的限制條件能將關(guān)聯(lián)化繁為簡雪侥,即可以將多對多簡化為1對多,或?qū)?對多簡化為1對1精绎;
第三步:走查場景速缨,修改領(lǐng)域模型
關(guān)聯(lián)關(guān)系、對應(yīng)關(guān)系是否正確代乃?
分析關(guān)聯(lián)旬牲,通過對業(yè)務(wù)的更深入分析,明確關(guān)聯(lián)的方向或者去掉一些不需要的關(guān)聯(lián)襟己;
這些實體及關(guān)聯(lián)關(guān)系能否全部覆蓋這些業(yè)務(wù)場景引谜?
(2)系統(tǒng)劃分
為了解決在方法一中遇到的問題,需要采用微服務(wù)的思想擎浴,根據(jù)實體間的聯(lián)系強弱员咽,以實體為對象,劃分到不同系統(tǒng)中贮预。
將每個系統(tǒng)獨立開(解耦)贝室,系統(tǒng)與系統(tǒng)間通過接口調(diào)用數(shù)據(jù)契讲,公共模塊單獨作為一個系統(tǒng)(如此處用戶管理系統(tǒng)),每個系統(tǒng)都有各自的三層結(jié)構(gòu)(詳見上篇)滑频。
三捡偏、兩種設(shè)計方式總結(jié)
介紹完兩種不同的需求設(shè)計方式,再來看這兩種方式的聯(lián)系峡迷。
1银伟、如何選取
這個圖表示隨著系統(tǒng)復(fù)雜程度增加,兩種設(shè)計方式開發(fā)時間的變化趨勢绘搞⊥埽可以看出,但產(chǎn)品復(fù)雜度低時夯辖,RDD的模式會很快捷琉预,這個就非常適合初創(chuàng)型、小型的系統(tǒng)設(shè)計蒿褂,當(dāng)產(chǎn)品復(fù)雜到一定程度時圆米,RDD的開發(fā)時間會指數(shù)上升,而DDD的模式則始終比較平穩(wěn)啄栓,所以DDD會適合復(fù)雜的系統(tǒng)設(shè)計娄帖。
2、兩種方式中的實體
上篇說到昙楚,后臺三層結(jié)構(gòu)中块茁,業(yè)務(wù)層也叫領(lǐng)域?qū)樱鋵嵑皖I(lǐng)域模型中的領(lǐng)域是一樣的桂肌。RDD在數(shù)據(jù)庫設(shè)計時依然需要有E-R圖和實體,但產(chǎn)品經(jīng)理做需求設(shè)計時可以不用考慮(當(dāng)然有資源這樣做更好)永淌,因為對于簡單的后臺產(chǎn)品而言崎场,無需在初期理解的那么復(fù)雜,同時對很多從前端做到后臺的產(chǎn)品而言遂蛀,不用學(xué)習(xí)領(lǐng)域模型相關(guān)的內(nèi)容谭跨。
那么在DDD中,對于一個已經(jīng)對業(yè)務(wù)非常熟悉的產(chǎn)品經(jīng)理李滴,可以直接跳過實體螃宙,進行系統(tǒng)的微服務(wù)設(shè)計。但需要注意一個實體在多個系統(tǒng)都存在的情況所坯,這個時候就會導(dǎo)致同一實體的數(shù)據(jù)谆扎,存儲在多個系統(tǒng)中,無論是數(shù)據(jù)管理還是調(diào)用芹助,都會存在問題堂湖。所以老司機們還是要劃分清實體闲先,只是不用那么細致。
3无蜂、兩者關(guān)系
寫到這里伺糠,大家其實就會發(fā)現(xiàn),這兩種方式其實是一種包含關(guān)系斥季。對于復(fù)雜系統(tǒng)而言训桶,需要先采用DDD模式進行前期需求設(shè)計及系統(tǒng)劃分,當(dāng)微服務(wù)化后酣倾,每個子系統(tǒng)也就變成了簡單系統(tǒng)舵揭,也就可以采用RDD的模式了。