SaaS可配置化:功能可配置
![](http://image.woshipm.com/wp-files/img/58.jpg)
對(duì)SaaS系統(tǒng)而言,推崇的就是“按需購(gòu)買”,依據(jù)用戶的實(shí)際需求為用戶配置對(duì)應(yīng)的功能。但SaaS的多租戶模型決定了系統(tǒng)不可能參照傳統(tǒng)軟件模式,在為用戶部署時(shí)去掉不必要的功能。為適應(yīng)多變的用戶需求,SaaS軟件只能實(shí)現(xiàn)功能可配置。那么SaaS如何才能做到功能可配置呢?
一、劃分原子功能
所謂的原子功能也就是系統(tǒng)最小的組成單位,原子功能與原子功能間相互獨(dú)立,互不重疊,所有的原子功能具有如下原則:
- 每個(gè)功能都具有價(jià)值
- 每個(gè)都不可細(xì)分
- 功能間互不重疊
- 功能間不循環(huán)依賴
- 整個(gè)系統(tǒng)功能是完整的
劃分原子功能的最基本原則就是“每個(gè)功能都具有價(jià)值“,而且這種價(jià)值是相對(duì)用戶而言的。只有對(duì)用戶具有價(jià)值的功能才會(huì)被用戶購(gòu)買。
例如新建賬號(hào)時(shí),系統(tǒng)會(huì)對(duì)管理員輸入的手機(jī)號(hào)及信息進(jìn)行驗(yàn)證,但這種驗(yàn)證只是新建賬號(hào)的一個(gè)步驟,并不能為用戶帶來(lái)任何價(jià)值,也就不能劃分成單獨(dú)的一個(gè)原子功能。
除關(guān)注功能所具有的價(jià)值外,劃分原子功能時(shí),需基于既定功能架構(gòu)盡量細(xì)化,做到每個(gè)劃分的原子功能都是不可細(xì)分的。例如針對(duì)表單的錄入,用戶在創(chuàng)建時(shí)往往會(huì)區(qū)分新建表單和提交表單,這兩個(gè)操作對(duì)用戶而言都是具有意義的,所以劃分原子功能時(shí),拆分新建表單和提交表單兩個(gè)原子功能,會(huì)更清晰,更靈活。
在進(jìn)行分解時(shí),還需要關(guān)注原子功能之間的關(guān)聯(lián)關(guān)系,做到不可細(xì)分,互不重疊。
注意,功能的分解需要保持系統(tǒng)的完整性,也就是說(shuō),劃分出來(lái)的所有原子功能,要覆蓋整個(gè)系統(tǒng)的功能,而不存在沒(méi)有被劃分的系統(tǒng)功能,確保系統(tǒng)功能的完整性
二、功能定義及依賴
在實(shí)際操作過(guò)程中,作為產(chǎn)品人員,還需要對(duì)劃分的原子功能進(jìn)行定義和建立原子功能間的依賴關(guān)系。
所謂功能定義其實(shí)就是對(duì)原子功能進(jìn)行描述,定義它的名稱,關(guān)鍵字,內(nèi)容等相關(guān)信息。其中名稱和內(nèi)容便于對(duì)原子功能進(jìn)行詳細(xì)的描述,而關(guān)鍵字,重在對(duì)該原子功能進(jìn)行唯一標(biāo)識(shí),在系統(tǒng)上需要時(shí)刻確保改該標(biāo)識(shí)的唯一性。
除對(duì)原子功能進(jìn)行描述,在劃分過(guò)程中我們會(huì)發(fā)現(xiàn),并不是所有的原子功能都可單獨(dú)使用,有些功能需要依賴其他功能才能使用,功能與功能間存在一定的依賴關(guān)系。
例如,很多B端管理系統(tǒng)都具有“查看操作日志”這種功能,但“查看操作日志”往往依賴于“查看數(shù)據(jù)列表”,如果租戶沒(méi)有購(gòu)買“查看數(shù)據(jù)列表”這個(gè)功能,那“查看操作日志”也是不能使用的。
所謂的功能依賴,就是指一個(gè)功能在沒(méi)有另外某些功能的情況下是不能使用的 。
三、功能包設(shè)計(jì)
通過(guò)劃分原子,對(duì)原子功能進(jìn)行定義,及設(shè)計(jì)原子功能的依賴關(guān)系。我們基本實(shí)現(xiàn)了對(duì)系統(tǒng)功能的梳理,回到我們的出發(fā)點(diǎn):為應(yīng)對(duì)客戶的“按需購(gòu)買”而實(shí)現(xiàn)功能的可配置。
但其實(shí),光具有原子功能,并不能高效的實(shí)現(xiàn)功能的可配置。
通過(guò)逐步細(xì)化及劃分,系統(tǒng)原子功能數(shù)量急劇增加,可達(dá)到幾十個(gè),甚至可達(dá)到上百個(gè)。直接對(duì)這些原子功能進(jìn)行管理是超級(jí)復(fù)雜的事情。而且這些原子功能之間的使用并不是完全獨(dú)立,很多功能操作是相關(guān)。
例如客戶的新建,查看,編輯,刪除這些功能都是一起使用,往往不存在單獨(dú)使用的情況。并且在前一步中我們也了解到,劃分的原子功能之間是存在依賴關(guān)系的,而這些具有依賴關(guān)系的原子功能總是綁定起來(lái)一起使用,從使用場(chǎng)景也可以看出,具有相同使用場(chǎng)景的原子功能不是具有操作關(guān)聯(lián)性就是具有依賴性。
所以在原子功能的基礎(chǔ)上,整合具有操作關(guān)聯(lián)性及依賴性的原子功能,以功能包的形式統(tǒng)一管理是十分有必要的。
所謂的功能包就是一組具有關(guān)聯(lián)性,依賴性的原子功能的集合體,功能包的設(shè)計(jì)遵循高內(nèi)聚,低耦合的原則,具有關(guān)聯(lián)性的原子功能聚合在一起,而功能包與功能包盡量減少依賴關(guān)系,進(jìn)而保證每個(gè)功能包都盡可能單獨(dú)的進(jìn)行操作使用。
四、定義銷售包
功能包已經(jīng)將具有關(guān)聯(lián)性的原子功能集合在一起了,但對(duì)于客戶而言,定義好的功能包仍不能單獨(dú)使用。所以為了讓客戶購(gòu)買后能夠充分使用系統(tǒng),還需要按不同的商業(yè)意圖構(gòu)建適合用戶使用銷售包。
銷售包只是一種以向用戶銷售而定義功能包。例如但凡成型的SaaS應(yīng)用都會(huì)有最小版,標(biāo)準(zhǔn)版,完整版。或存在按客戶所屬行業(yè)而定義的服務(wù)行業(yè)版,制造行業(yè)版等。這些都可以稱之為銷售包。
五、功能使用校驗(yàn)
在前面已經(jīng)定義了原子功能,功能包,銷售包。在實(shí)際使用過(guò)程中,對(duì)用戶操作權(quán)限的校驗(yàn)還是基于原子功能的,通過(guò)驗(yàn)證改用戶是否具有改原子功能的操作權(quán)限,進(jìn)而實(shí)現(xiàn)系統(tǒng)功能權(quán)限的控制。
上述基本是針對(duì)功能可配置的大致簡(jiǎn)述,因?yàn)楣ぷ鞯男枰诓粩鄬?shí)踐及學(xué)習(xí)SaaS產(chǎn)品架構(gòu),前期已推出《SaaS可配置:數(shù)據(jù)可配置》,后期將會(huì)根據(jù)實(shí)際需要,不斷完善。
本文由 @老鬼 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自 Unsplash ,基于 CC0 協(xié)議
你好,請(qǐng)問(wèn)有saas產(chǎn)品架構(gòu)方面的書籍推薦嗎
深度好文
hi~你好,看了你的配置化的系列文章,很有感觸,有點(diǎn)還不太明白,可以加你Wx詳細(xì)了解下么
原子功能包就是最小粒度權(quán)限了吧
最近在改造內(nèi)部的一個(gè)系統(tǒng)做SaaS平臺(tái),一直在想多底拆到多細(xì)的粒度才合理,看了作者的文章,很受啟發(fā)
ess
我們做建筑行業(yè)垂直saas服務(wù),核心的業(yè)務(wù)自己研發(fā),但是其他cem想找pass外包商做,有能做成可配置的功能模塊的服務(wù)商么?
原子功能模塊的架構(gòu)設(shè)計(jì),后期能極大的增加擴(kuò)展性
難就難在原子服務(wù)的劃分和編排,太小了通信開銷成本增加,太大則耦合度太高
這已經(jīng)是我第三遍看該系列文章了,你說(shuō)得這點(diǎn)確實(shí)值得更深入講解,期待大佬新文