?領(lǐng)域建模有很多種方法憾儒,對于同樣的問題域使用不同的建模手段得到的模型可能也不盡相同询兴。于是我們經(jīng)常聽到這樣一個問題:
怎么才能保證建模的正確性乃沙?
?這聽起來是個合理的質(zhì)疑,但實(shí)際上卻不是那么有道理诗舰。首先我們需要明白建模的目的是什么警儒?如果僅僅是為了描畫問題,那么并沒有什么對錯之分——僅僅是立場和角度的差別眶根;而如果是為了企業(yè)業(yè)務(wù)系統(tǒng)而進(jìn)行建模蜀铲,那么這個問題應(yīng)該變?yōu)椋?/p>
如何保證模型能夠支撐企業(yè)的運(yùn)營?
我想用下面這個例子來簡要的回答一下這個問題属百。
?在開始分析和建模之前记劝,我們需要知道企業(yè)業(yè)務(wù)系統(tǒng)的目的是什么;而企業(yè)業(yè)務(wù)系統(tǒng)的目的往往跟決策者或者管理的訴求相關(guān)族扰。我們現(xiàn)在需要移情到一位管理者身上厌丑,看看他的訴求到底是什么。
?現(xiàn)在假想你是一家在線電子書店的COO渔呵。某天怒竿,有一位顧客向你投訴,說他訂購的書少了一本扩氢,并且價錢算錯了耕驰,他多給了錢。在你承諾理賠之前录豺,你需要核對一下這位顧客說的是否屬實(shí)朦肘。那么這個時候你需要知道什么樣的信息才能做出準(zhǔn)確的判斷呢?
?簡單來說双饥,你需要知道這位顧客訂購了哪些書籍厚骗,付了多少錢以及書店到底為這個顧客送了哪些書籍。不幸的是兢哭,由于科技不夠發(fā)達(dá)领舰,你無法直接駕駛時光機(jī)器回到從前去親眼看看發(fā)生了哪些事。但幸運(yùn)的是迟螺,你并不需要會這么做冲秽,你只需要看看這位顧客的訂單,和網(wǎng)銀的支付記錄以及你們書店交給EMS的快遞單存根矩父,就應(yīng)該知道這些信息了锉桑。
?你找到了訂單和EMS快遞存根。發(fā)現(xiàn)這位顧客是在三天前訂購的書窍株,而你們在前天就已經(jīng)將書郵寄出去了民轴。并在訂單上看到這位顧客一共訂購了7本書攻柠,但是在EMS的快遞存根上,并沒有任何書籍的信息后裸,只有地址瑰钮、包裹號、郵費(fèi)和重量什么的信息微驶。這時候你覺得應(yīng)該去詢問一下配送部門浪谴,看看他們做了什么。
?在配送部門你根據(jù)包裹號查到了那個包裹的信息因苹,果然里面只有6本書苟耻。同時你在包裹部門發(fā)現(xiàn)了一張延期交貨單。上面說明由于缺貨扶檐,這位顧客另外一本書正在等待發(fā)貨凶杖。
?那么剩下的問題就是支付問題了,從網(wǎng)銀的記錄上看款筑,客戶不含郵費(fèi)一共支付了132.5元智蝠。訂單上顯示的金額也是132.5,顯然這位顧客并沒有多付錢醋虏。
?為了保證準(zhǔn)確寻咒,你重新從網(wǎng)站上選了這7本書,想看看是否也會是這個價錢颈嚼。但你卻意外的發(fā)現(xiàn)毛秘,以供只需要128.3。仔細(xì)辨認(rèn)后阻课,你發(fā)現(xiàn)有一本圖書現(xiàn)在是促銷叫挟。那么現(xiàn)在的問題是,促銷到底是什么時候開始的限煞?
?你到了市場部抹恳,市場部給了你一份近期促銷計(jì)劃。你發(fā)現(xiàn)那部書是昨天才開始促銷的署驻,也就是說在那位顧客在下單的時候奋献,促銷還沒有開始。
?這個時候旺上,你覺得應(yīng)該給你的顧客打一個電話致歉瓶蚂,商討如何后續(xù)郵寄的問題,并向他說明促銷的事情宣吱。
?你是否覺得這個COO當(dāng)?shù)糜悬c(diǎn)累呢窃这?這當(dāng)然是虛構(gòu)的。但是從這故事里面我們看到什么呢征候?
任何業(yè)務(wù)事件都會以某種數(shù)據(jù)的形式留下足跡
我們對于事件的追溯可以通過對數(shù)據(jù)的追溯來完成杭攻。正如上面這個故事里祟敛,你無法回到從前去看看到底發(fā)生了什么,但是卻可以在單據(jù)的基礎(chǔ)上兆解,一定程度的還原當(dāng)時事情發(fā)生的場景馆铁。當(dāng)我們把這些數(shù)據(jù)的足跡按照時間順序排列起來,我們幾乎可以清晰的推測出這個在過往的一段時間內(nèi)到底發(fā)生了哪些事情痪宰。
?那么為什么這些數(shù)據(jù)形成的鏈條能夠成為幫助我們追溯業(yè)務(wù)的營運(yùn)呢叼架?
?因?yàn)檫@些數(shù)據(jù)并不是隨便挑選的畔裕。如果我們回顧一下你作為COO檢查這個疏漏的過程衣撬,你首先選擇了訂單和EMS快遞存根,換句話說伐庭,如果訂單出現(xiàn)差錯烤镐,或者EMS快遞存根上說明你的確郵寄了7本書帘饶,那么這個疏漏的責(zé)任并不在你。所以這兩個訂單實(shí)際上是你這個企業(yè)法律責(zé)任的起點(diǎn)和終點(diǎn)扛点。
?當(dāng)你確定這個疏漏的責(zé)任在你之后,你選擇審查一些流程執(zhí)行的結(jié)果岂丘,比如包裹存根陵究。從而驗(yàn)證一些主要的業(yè)務(wù)流程執(zhí)行的結(jié)果是否正確。換句話講奥帘,這些數(shù)據(jù)是支撐你運(yùn)營體系的關(guān)鍵流程的執(zhí)行結(jié)果铜邮。
?正是由于這些數(shù)據(jù)是流程執(zhí)行的結(jié)果,它們才使我們可以在不了解流程細(xì)節(jié)的前提下寨蹋,對某些突發(fā)事件進(jìn)行追述和分析松蒜。
?除了上面那個極端的例子(投訴),對于任何一筆正常的經(jīng)濟(jì)往來已旧,我們都需要知道:
??1.如果我付出一筆資金秸苗,那么我的權(quán)益是什么?
??2.如果我收到一筆資金运褪,那我的義務(wù)是什么惊楼?
?而這些問題都需要業(yè)務(wù)系統(tǒng)捕捉到相應(yīng)的足跡才能夠回答。所以企業(yè)的業(yè)務(wù)系統(tǒng)主要的目的之一秸讹,就是記錄這些足跡檀咙,并將這些足跡形成一條有效的追溯鏈。
?而作為業(yè)務(wù)分析師的你嗦枢,則應(yīng)該知道哪些事件在運(yùn)營上是需要追溯的攀芯,這些事件都留下了什么足跡。
?這些足跡通常都具有一個有意思的特性文虏,即它們都是時標(biāo)性對象(moment-interval)侣诺。發(fā)現(xiàn)這些時標(biāo)性對象就是建模的起點(diǎn)殖演。對于這些時標(biāo)性對象稍加整理,我們就得到了整個領(lǐng)域模型的骨干年鸳。
?在得到骨干之后趴久,我們需要豐富這個模型,使它可以更好的描述業(yè)務(wù)概念搔确。這時候彼棍,我們需要補(bǔ)充一些實(shí)體對象。通常實(shí)體對象有三類:人膳算、地點(diǎn)座硕、物(party/place/thing)。
?在這個基礎(chǔ)上涕蜂,我們可以進(jìn)一步抽象這些實(shí)體是如何參與到各種不同的流程中去的华匾,這時候,我們就需要用到角色(role)机隙。
最后再把一些需要描述的信息放入描述對象(description)蜘拉。
?我們就得到了應(yīng)用四色建模方法(color modeling)建立的一套領(lǐng)域模型。
?簡要回顧一下上面的過程有鹿,不難發(fā)現(xiàn)我們建模的次序和重點(diǎn):
1.首先以滿足管理和運(yùn)營的需要為前提旭旭,尋找需要追溯的事件。
2.根據(jù)這些需要追溯葱跋,尋找足跡以及相應(yīng)的時標(biāo)性對象持寄。
3.尋找時標(biāo)性對象周圍的人、事年局、物际看。
4.從中抽象角色。
5.把一些信息用描述對象補(bǔ)足矢否。
?由于在第一步中仲闽,我們就將管理和運(yùn)營目標(biāo)作為建模的出發(fā)點(diǎn)。因此僵朗,整套模型實(shí)際上是圍繞這些“如何有效的追蹤這些目標(biāo)”而建立的赖欣,這樣的模型可以保證模型支撐企業(yè)的運(yùn)營。
題外話
?有人提了一個很有意思的問題:為什么你會以一個看上去像極端情況的例子來說明這個建模方法验庙?以我的經(jīng)驗(yàn)來看顶吮,對于業(yè)務(wù)系統(tǒng)有兩個東西是很重要的:1.可追溯性(traceability)和執(zhí)行效率(efficiency)。這里的可追溯性是指責(zé)任的可追溯性(traceability of liability)粪薛,而通常都是在一些不太好的事情發(fā)生之后悴了,才需要對責(zé)任進(jìn)行追溯。所以想一個相對負(fù)面的例子更容易幫助我們找到建模索需要解決的問題。
本篇所說的四色法與Peter Coad的四色法并不完全相同湃交,不敢說是發(fā)展熟空,僅僅是對Peter Ccoad四色的一種變化吧。