第一次接觸GoogleEarth,帶給我相當(dāng)?shù)恼鸷场D憧梢噪S意轉(zhuǎn)動(dòng)地球,通過(guò)縮放,看到不同層次的景象,這著實(shí)讓我吃驚,竟然可以這樣!手握鼠標(biāo),來(lái)回查看,有種作“上帝”的感覺,如果是實(shí)時(shí)的那就不得了了!相信很多人都有在上面尋找自己家的經(jīng)歷。就拿我來(lái)說(shuō),首先轉(zhuǎn)到背面中國(guó)的位置,滑動(dòng)滾輪,逐漸深圳的全貌顯露出來(lái),西面是蛇口黃色的填海區(qū),上面是深圳的綠肺塘朗山。繼續(xù)向下,黑灰色的廣深高速開始清晰可見,在我辨別清楚小區(qū)所在位置后,范圍進(jìn)一步縮小,旁邊高級(jí)中學(xué)里紅色跑道包圍的足球場(chǎng),看起來(lái)很規(guī)整,小區(qū)游泳池,也從一個(gè)小藍(lán)點(diǎn)逐漸露出了它的鋼琴造型。最后停放在小區(qū)里的轎車也顯露無(wú)遺。
GoogleEarth提供了一個(gè)可伸縮的鳥瞰視角,生動(dòng)的展示了我們所處地方的本來(lái)面貌。這不同于,我們每日看到的景象,也不同于我們?cè)?jīng)看到的地圖和地球儀。在DomainModel中,雖然沒有GoogleEarth for DomainModel的特殊版本。但我們可以采用類似的方法來(lái)查看我們的Model。
在明確了DomainModel控制風(fēng)格和演化規(guī)律后,我們還需要確定DomainModel中各部分的依賴和職責(zé),才能得到整體觀感。
“從演化規(guī)律來(lái)看,要理解生命周期短者的觀點(diǎn),必先理解生命周期長(zhǎng)者的觀點(diǎn)”:)
我們先考察OO大師PeterCoad等的著作--Java Modeling In Color With Uml。
PeterCoad關(guān)于企業(yè)信息系統(tǒng)觀點(diǎn)的努力,首先在Object Models:Strategies,Patterns, and Application中得到表達(dá),隨后,在Java Modeling In Color With Uml中,通過(guò)“Domain-Neutral Component”更系統(tǒng)的完善了他的構(gòu)想。
“色彩迷”PeterCoad“四色論”觀點(diǎn),簡(jiǎn)單可表達(dá)為“特定領(lǐng)域構(gòu)件,用四種領(lǐng)域中立,按照重要程度分配顏色的構(gòu)件原型,建立模型。”
四種構(gòu)件原型為:
“moment-interval”--代表領(lǐng)域中可長(zhǎng)可短的業(yè)務(wù)交互。因其地位最重要,故用扎眼的粉紅色表示。
“party, place, or thing” --表示“moment-interval”中,涉及的實(shí)體。其地位在“description”之上,而在“role”之下,用舒服的綠色。
“role”-- 是指“moment-interval”中,"party, place, or thing"的參與方式。地位僅次于“moment-interval”,第二刺眼,黃色。
“description”-- 用來(lái)描述上述三者。最平靜,藍(lán)色。
關(guān)聯(lián),一般是“moment-interval”----“role”----“party, place, or thing” ----“description”。但也存在其他關(guān)系。
另外PeterCoad在貢獻(xiàn)出領(lǐng)域中立構(gòu)件原型“烤箱”的同時(shí),還不忘贈(zèng)送我們用它烹調(diào)出來(lái)的12套“特定領(lǐng)域構(gòu)件”大餐,讓我們品嘗。
ColorUml確實(shí)給構(gòu)建企業(yè)信息系統(tǒng),帶了很多實(shí)用的指導(dǎo)。不過(guò)Domain.Driven.Design作者,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)專家,Eric&Evans的觀點(diǎn),也著實(shí)讓人入迷。
Eric&Evans在DDD中,明確提出了DomainModel職責(zé)層的概念。
“在深入了解一個(gè)領(lǐng)域之后,大模式開始顯現(xiàn)。一些領(lǐng)域具有自然的層次結(jié)構(gòu)。某些概念和活動(dòng)依賴于其他元素,而這些元素又出于不同的原因,以不同速率變化著,我們?nèi)绾卫眠@種自然結(jié)構(gòu),使它變得更加明顯和有用呢?這種層次結(jié)構(gòu)意味著分層,一種最成功的構(gòu)架設(shè)計(jì)模式。”
“職責(zé)層最適合用分層模式中的“松散分層系統(tǒng)”來(lái)設(shè)計(jì),它允許層,不光可以訪問它的直接下層,還可以訪問所有低于它的層。
因此:
仔細(xì)考慮模型中概念依賴的關(guān)系,它們的變更速率,以及導(dǎo)致領(lǐng)域各部分發(fā)生變化的來(lái)源。如果界定出了領(lǐng)域中的自然層次,那就把它們轉(zhuǎn)化成大的抽象職責(zé)。這些職責(zé)應(yīng)當(dāng)描述系統(tǒng)的高層目標(biāo)和設(shè)計(jì)。重構(gòu)模型,讓“領(lǐng)域?qū)ο?rdquo;,“聚合”和“模塊”適合于它所放入的職責(zé)層”
具體分層由上到下是:
Decision ----決策支持,需要執(zhí)行什么和設(shè)置何種策略?使用業(yè)務(wù)活動(dòng)提供的當(dāng)前信息和歷史信息,來(lái)分析決策,設(shè)置策略。
Policy ----策略,規(guī)則是什么?可以使用或約束低層行為。
Commitment----約束,承諾了什么?協(xié)議,合同。約束操作層,但其本身也是業(yè)務(wù)活動(dòng)的結(jié)果。
Operation----操作,做什么?企業(yè)運(yùn)營(yíng)的核心業(yè)務(wù)活動(dòng)
Potential----潛能,考慮能做什么?組織和其可用的資源。
在一般應(yīng)用中,Operation層和Potential層可以放入大部分DomainObject。
比較上述兩者,可以找到相似之處,“party, place, or thing”構(gòu)件原型同Potential層中包含的東西,極為類似。Operation難道不是“moment-interval”么?Commitment也是“moment-interval”的一種。“description”同“specification”類似。當(dāng)然,也有不同之處,ColorUml沒有強(qiáng)調(diào)對(duì)象依賴關(guān)系的重要性。"role"在DDD中,沒有突出的位置。
下面,談?wù)勎业南敕ā?
根據(jù)前面的討論和得到的規(guī)律,結(jié)合上面的論述。我們希望系統(tǒng)可以隨著業(yè)務(wù)的變化,而同步變化。如果,我們總是試圖遵循業(yè)務(wù)概念的依賴來(lái)搭建系統(tǒng),那么,我們就能更直接的實(shí)現(xiàn)業(yè)務(wù)變化。如果,我們的系統(tǒng)就是按照業(yè)務(wù)的概念依賴關(guān)系,搭建起來(lái)的。那么,業(yè)務(wù)發(fā)生變化時(shí),我能總能找到對(duì)應(yīng)的變化點(diǎn)。按照概念依賴關(guān)系,我們知道那些對(duì)象可能會(huì)涉及到這種變化,那些對(duì)象根本不用考慮。
但正如前面提到的,業(yè)務(wù)概念的依賴關(guān)系,不會(huì)直接呈現(xiàn)在我們面前,我們必須采用“演化的觀點(diǎn)”,加以提取,不斷把基本概念和擴(kuò)展概念進(jìn)行分離。
入口,我選擇能體現(xiàn)企業(yè)存在意義的“核心業(yè)務(wù)交互”(理論上,可以從任何一個(gè)概念入手)。這類似于前面兩種方法的Operation/moment-interval。要理解加法,我們首先要對(duì)可以做加法的數(shù)有所了解。同樣道理,要理解“核心業(yè)務(wù)交互”,我們首先要理解參與交互的參與者。舉例來(lái)說(shuō),我們要理解生命周期較短的“購(gòu)買商品”,就需要理解,誰(shuí)買的?客戶,誰(shuí)賣的?員工,購(gòu)買的是什么?商品,在哪里購(gòu)買的?地點(diǎn),我們得到一些依賴關(guān)系:
購(gòu)買商品-->客戶,購(gòu)買商品-->員工,購(gòu)買商品-->商品,購(gòu)買商品-->地點(diǎn)。
要理解誰(shuí)來(lái)扮演客戶或員工的角色么?如果需要的話,客戶-->參與者,員工-->參與者。
商品要分類么?是,商品-->商品目錄。商品的定價(jià)是多少?商品定價(jià)-->商品。在不同目錄里商品是同樣的定價(jià)么?否,集團(tuán)購(gòu)買的要便宜些,商品<--商品目錄定價(jià)-->商品目錄。商品目錄定價(jià)-->商品定價(jià)
商品有優(yōu)惠策略么?有賣二送一,優(yōu)惠策略-->購(gòu)買商品。優(yōu)惠策略有期限么?有,只在國(guó)慶節(jié)優(yōu)惠,優(yōu)惠策略-->日歷。
“核心業(yè)務(wù)交互”也可以是生命周期較長(zhǎng)的概念,如“協(xié)議”。協(xié)議可以由一次較短的核心業(yè)務(wù)交互產(chǎn)生。如:電信中的購(gòu)買協(xié)議,就是通過(guò)訂購(gòu)活動(dòng)產(chǎn)生的。也有把訂單視為協(xié)議的,但區(qū)分訂單和由此產(chǎn)生的購(gòu)買協(xié)議,可以更好的對(duì)應(yīng)實(shí)際訂單和跟隨訂單的協(xié)議書。按照“靜態(tài)依賴”規(guī)律,得到訂購(gòu)-->購(gòu)買協(xié)議。
“核心業(yè)務(wù)交互”可以很長(zhǎng),也可以很短。實(shí)際上,“核心業(yè)務(wù)交互”的壽命極限可以逼近參與角色,可以認(rèn)為“客戶”也是一個(gè)大的“核心業(yè)務(wù)交互”,它通過(guò)“客戶開戶”這個(gè)瞬間“核心業(yè)務(wù)交互”而產(chǎn)生。
瞬間“核心業(yè)務(wù)交互”,比比皆是,通常在一個(gè)事務(wù)里處理的業(yè)務(wù)活動(dòng),都可以算作瞬間的“業(yè)務(wù)交互”。甚至,還存在,比事務(wù)還小的瞬間“業(yè)務(wù)交互”,例如:在一次“轉(zhuǎn)賬業(yè)務(wù)”中,可以包含一個(gè)“轉(zhuǎn)出業(yè)務(wù)”和一個(gè)“轉(zhuǎn)入業(yè)務(wù)”。
理解“業(yè)務(wù)交互”,是理解DomainModel的基礎(chǔ)。可以把“業(yè)務(wù)交互”看作是連接其他概念的紐帶,它本身會(huì)依賴一些基本元素,參與角色,資源,。在其上有依賴于它的協(xié)議、約束,策略和決策支持等。
我們來(lái)看一個(gè)“動(dòng)態(tài)依賴”實(shí)例。
個(gè)人銀行業(yè)務(wù):
通過(guò)“掛失業(yè)務(wù)”,創(chuàng)建一個(gè)“掛失協(xié)議”。掛失業(yè)務(wù)-->掛失協(xié)議(靜態(tài)依賴)
該“掛失協(xié)議”將影響到“取款業(yè)務(wù)”。掛失協(xié)議-->取款業(yè)務(wù)(動(dòng)態(tài)依賴)
再看另外一個(gè)實(shí)例。
證券交易:
計(jì)算某筆“委托”的交易費(fèi)用。費(fèi)用策略-->委托(動(dòng)態(tài)依賴)
可能,你已經(jīng)注意到了這里有“核心業(yè)務(wù)交互”和“業(yè)務(wù)交互”,他們的區(qū)別在于,“核心業(yè)務(wù)交互”主要針對(duì)企業(yè)的外界涉眾而發(fā)生的“業(yè)務(wù)交互”,是企業(yè)的核心目標(biāo)。此外,還存在為了達(dá)到核心目標(biāo)而需要的,支持和管理的“業(yè)務(wù)交互”,如:“用戶授權(quán)”,簡(jiǎn)單的“商品入庫(kù)”等等。需要注意的是,Eric Evans的職責(zé)層中的Operation應(yīng)當(dāng)理解為“核心業(yè)務(wù)交互”。而不是“業(yè)務(wù)交互”,考慮到Potential層產(chǎn)生員工的“員工開戶”,也是一個(gè)“業(yè)務(wù)交互”,就不難理解我的意思。
對(duì)于企業(yè)級(jí)應(yīng)用,還可能存在的依賴有:
工作流-->業(yè)務(wù)交互
工作流策略-->工作流
項(xiàng)目管理-->業(yè)務(wù)交互
由于,它們可能會(huì)影響到整個(gè)“業(yè)務(wù)交互”,其基礎(chǔ)工作流引擎,基礎(chǔ)業(yè)務(wù)規(guī)則引擎,基礎(chǔ)項(xiàng)目管理構(gòu)件,都需要放入底層的包中,在其之上擴(kuò)展出的具體流程、規(guī)則和實(shí)際項(xiàng)目,將放入其依賴的具體業(yè)務(wù)交互的包里。
大體上,我接受Eric&Evans的觀點(diǎn),從8000公里上空來(lái)看,最下層是最穩(wěn)定的“潛能”、通用業(yè)務(wù)元素和通用引擎構(gòu)件,在其之上是“核心業(yè)務(wù)交互”層,它將受到施加于其上的約束、承諾層的影響,在約束和承諾層之上,是策略層,策略通過(guò)考察“業(yè)務(wù)交互”和相關(guān)的約束承諾,按照已定義的規(guī)則行事,最后,決策層負(fù)責(zé)設(shè)置這些規(guī)則。
不過(guò),正如Eric&Evans已表達(dá)的,把它看作一個(gè)指導(dǎo),而不是約束。因?yàn)椋褪窃谕粚又校粋(gè)包中,也要考慮對(duì)象間的依賴關(guān)系,另外,領(lǐng)域的自然層次結(jié)構(gòu),并不一定完全遵循這種固定的劃分模式。
總之,我希望通過(guò)考察“核心業(yè)務(wù)交互”入手,建立一個(gè)帶有強(qiáng)烈“單向依賴”傾向的積木式DomainModel,得到一種簡(jiǎn)單、明晰的優(yōu)雅領(lǐng)域構(gòu)架,它反映了領(lǐng)域的自然分層結(jié)構(gòu),因而,能從容應(yīng)付業(yè)務(wù)當(dāng)前和未來(lái)的發(fā)展變化。
GoogleEarth提供了一個(gè)可伸縮的鳥瞰視角,生動(dòng)的展示了我們所處地方的本來(lái)面貌。這不同于,我們每日看到的景象,也不同于我們?cè)?jīng)看到的地圖和地球儀。在DomainModel中,雖然沒有GoogleEarth for DomainModel的特殊版本。但我們可以采用類似的方法來(lái)查看我們的Model。
在明確了DomainModel控制風(fēng)格和演化規(guī)律后,我們還需要確定DomainModel中各部分的依賴和職責(zé),才能得到整體觀感。
“從演化規(guī)律來(lái)看,要理解生命周期短者的觀點(diǎn),必先理解生命周期長(zhǎng)者的觀點(diǎn)”:)
我們先考察OO大師PeterCoad等的著作--Java Modeling In Color With Uml。
PeterCoad關(guān)于企業(yè)信息系統(tǒng)觀點(diǎn)的努力,首先在Object Models:Strategies,Patterns, and Application中得到表達(dá),隨后,在Java Modeling In Color With Uml中,通過(guò)“Domain-Neutral Component”更系統(tǒng)的完善了他的構(gòu)想。
“色彩迷”PeterCoad“四色論”觀點(diǎn),簡(jiǎn)單可表達(dá)為“特定領(lǐng)域構(gòu)件,用四種領(lǐng)域中立,按照重要程度分配顏色的構(gòu)件原型,建立模型。”
四種構(gòu)件原型為:
“moment-interval”--代表領(lǐng)域中可長(zhǎng)可短的業(yè)務(wù)交互。因其地位最重要,故用扎眼的粉紅色表示。
“party, place, or thing” --表示“moment-interval”中,涉及的實(shí)體。其地位在“description”之上,而在“role”之下,用舒服的綠色。
“role”-- 是指“moment-interval”中,"party, place, or thing"的參與方式。地位僅次于“moment-interval”,第二刺眼,黃色。
“description”-- 用來(lái)描述上述三者。最平靜,藍(lán)色。
關(guān)聯(lián),一般是“moment-interval”----“role”----“party, place, or thing” ----“description”。但也存在其他關(guān)系。
另外PeterCoad在貢獻(xiàn)出領(lǐng)域中立構(gòu)件原型“烤箱”的同時(shí),還不忘贈(zèng)送我們用它烹調(diào)出來(lái)的12套“特定領(lǐng)域構(gòu)件”大餐,讓我們品嘗。
ColorUml確實(shí)給構(gòu)建企業(yè)信息系統(tǒng),帶了很多實(shí)用的指導(dǎo)。不過(guò)Domain.Driven.Design作者,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)專家,Eric&Evans的觀點(diǎn),也著實(shí)讓人入迷。
Eric&Evans在DDD中,明確提出了DomainModel職責(zé)層的概念。
“在深入了解一個(gè)領(lǐng)域之后,大模式開始顯現(xiàn)。一些領(lǐng)域具有自然的層次結(jié)構(gòu)。某些概念和活動(dòng)依賴于其他元素,而這些元素又出于不同的原因,以不同速率變化著,我們?nèi)绾卫眠@種自然結(jié)構(gòu),使它變得更加明顯和有用呢?這種層次結(jié)構(gòu)意味著分層,一種最成功的構(gòu)架設(shè)計(jì)模式。”
“職責(zé)層最適合用分層模式中的“松散分層系統(tǒng)”來(lái)設(shè)計(jì),它允許層,不光可以訪問它的直接下層,還可以訪問所有低于它的層。
因此:
仔細(xì)考慮模型中概念依賴的關(guān)系,它們的變更速率,以及導(dǎo)致領(lǐng)域各部分發(fā)生變化的來(lái)源。如果界定出了領(lǐng)域中的自然層次,那就把它們轉(zhuǎn)化成大的抽象職責(zé)。這些職責(zé)應(yīng)當(dāng)描述系統(tǒng)的高層目標(biāo)和設(shè)計(jì)。重構(gòu)模型,讓“領(lǐng)域?qū)ο?rdquo;,“聚合”和“模塊”適合于它所放入的職責(zé)層”
具體分層由上到下是:
Decision ----決策支持,需要執(zhí)行什么和設(shè)置何種策略?使用業(yè)務(wù)活動(dòng)提供的當(dāng)前信息和歷史信息,來(lái)分析決策,設(shè)置策略。
Policy ----策略,規(guī)則是什么?可以使用或約束低層行為。
Commitment----約束,承諾了什么?協(xié)議,合同。約束操作層,但其本身也是業(yè)務(wù)活動(dòng)的結(jié)果。
Operation----操作,做什么?企業(yè)運(yùn)營(yíng)的核心業(yè)務(wù)活動(dòng)
Potential----潛能,考慮能做什么?組織和其可用的資源。
在一般應(yīng)用中,Operation層和Potential層可以放入大部分DomainObject。
比較上述兩者,可以找到相似之處,“party, place, or thing”構(gòu)件原型同Potential層中包含的東西,極為類似。Operation難道不是“moment-interval”么?Commitment也是“moment-interval”的一種。“description”同“specification”類似。當(dāng)然,也有不同之處,ColorUml沒有強(qiáng)調(diào)對(duì)象依賴關(guān)系的重要性。"role"在DDD中,沒有突出的位置。
下面,談?wù)勎业南敕ā?
根據(jù)前面的討論和得到的規(guī)律,結(jié)合上面的論述。我們希望系統(tǒng)可以隨著業(yè)務(wù)的變化,而同步變化。如果,我們總是試圖遵循業(yè)務(wù)概念的依賴來(lái)搭建系統(tǒng),那么,我們就能更直接的實(shí)現(xiàn)業(yè)務(wù)變化。如果,我們的系統(tǒng)就是按照業(yè)務(wù)的概念依賴關(guān)系,搭建起來(lái)的。那么,業(yè)務(wù)發(fā)生變化時(shí),我能總能找到對(duì)應(yīng)的變化點(diǎn)。按照概念依賴關(guān)系,我們知道那些對(duì)象可能會(huì)涉及到這種變化,那些對(duì)象根本不用考慮。
但正如前面提到的,業(yè)務(wù)概念的依賴關(guān)系,不會(huì)直接呈現(xiàn)在我們面前,我們必須采用“演化的觀點(diǎn)”,加以提取,不斷把基本概念和擴(kuò)展概念進(jìn)行分離。
入口,我選擇能體現(xiàn)企業(yè)存在意義的“核心業(yè)務(wù)交互”(理論上,可以從任何一個(gè)概念入手)。這類似于前面兩種方法的Operation/moment-interval。要理解加法,我們首先要對(duì)可以做加法的數(shù)有所了解。同樣道理,要理解“核心業(yè)務(wù)交互”,我們首先要理解參與交互的參與者。舉例來(lái)說(shuō),我們要理解生命周期較短的“購(gòu)買商品”,就需要理解,誰(shuí)買的?客戶,誰(shuí)賣的?員工,購(gòu)買的是什么?商品,在哪里購(gòu)買的?地點(diǎn),我們得到一些依賴關(guān)系:
購(gòu)買商品-->客戶,購(gòu)買商品-->員工,購(gòu)買商品-->商品,購(gòu)買商品-->地點(diǎn)。
要理解誰(shuí)來(lái)扮演客戶或員工的角色么?如果需要的話,客戶-->參與者,員工-->參與者。
商品要分類么?是,商品-->商品目錄。商品的定價(jià)是多少?商品定價(jià)-->商品。在不同目錄里商品是同樣的定價(jià)么?否,集團(tuán)購(gòu)買的要便宜些,商品<--商品目錄定價(jià)-->商品目錄。商品目錄定價(jià)-->商品定價(jià)
商品有優(yōu)惠策略么?有賣二送一,優(yōu)惠策略-->購(gòu)買商品。優(yōu)惠策略有期限么?有,只在國(guó)慶節(jié)優(yōu)惠,優(yōu)惠策略-->日歷。
“核心業(yè)務(wù)交互”也可以是生命周期較長(zhǎng)的概念,如“協(xié)議”。協(xié)議可以由一次較短的核心業(yè)務(wù)交互產(chǎn)生。如:電信中的購(gòu)買協(xié)議,就是通過(guò)訂購(gòu)活動(dòng)產(chǎn)生的。也有把訂單視為協(xié)議的,但區(qū)分訂單和由此產(chǎn)生的購(gòu)買協(xié)議,可以更好的對(duì)應(yīng)實(shí)際訂單和跟隨訂單的協(xié)議書。按照“靜態(tài)依賴”規(guī)律,得到訂購(gòu)-->購(gòu)買協(xié)議。
“核心業(yè)務(wù)交互”可以很長(zhǎng),也可以很短。實(shí)際上,“核心業(yè)務(wù)交互”的壽命極限可以逼近參與角色,可以認(rèn)為“客戶”也是一個(gè)大的“核心業(yè)務(wù)交互”,它通過(guò)“客戶開戶”這個(gè)瞬間“核心業(yè)務(wù)交互”而產(chǎn)生。
瞬間“核心業(yè)務(wù)交互”,比比皆是,通常在一個(gè)事務(wù)里處理的業(yè)務(wù)活動(dòng),都可以算作瞬間的“業(yè)務(wù)交互”。甚至,還存在,比事務(wù)還小的瞬間“業(yè)務(wù)交互”,例如:在一次“轉(zhuǎn)賬業(yè)務(wù)”中,可以包含一個(gè)“轉(zhuǎn)出業(yè)務(wù)”和一個(gè)“轉(zhuǎn)入業(yè)務(wù)”。
理解“業(yè)務(wù)交互”,是理解DomainModel的基礎(chǔ)。可以把“業(yè)務(wù)交互”看作是連接其他概念的紐帶,它本身會(huì)依賴一些基本元素,參與角色,資源,。在其上有依賴于它的協(xié)議、約束,策略和決策支持等。
我們來(lái)看一個(gè)“動(dòng)態(tài)依賴”實(shí)例。
個(gè)人銀行業(yè)務(wù):
通過(guò)“掛失業(yè)務(wù)”,創(chuàng)建一個(gè)“掛失協(xié)議”。掛失業(yè)務(wù)-->掛失協(xié)議(靜態(tài)依賴)
該“掛失協(xié)議”將影響到“取款業(yè)務(wù)”。掛失協(xié)議-->取款業(yè)務(wù)(動(dòng)態(tài)依賴)
再看另外一個(gè)實(shí)例。
證券交易:
計(jì)算某筆“委托”的交易費(fèi)用。費(fèi)用策略-->委托(動(dòng)態(tài)依賴)
可能,你已經(jīng)注意到了這里有“核心業(yè)務(wù)交互”和“業(yè)務(wù)交互”,他們的區(qū)別在于,“核心業(yè)務(wù)交互”主要針對(duì)企業(yè)的外界涉眾而發(fā)生的“業(yè)務(wù)交互”,是企業(yè)的核心目標(biāo)。此外,還存在為了達(dá)到核心目標(biāo)而需要的,支持和管理的“業(yè)務(wù)交互”,如:“用戶授權(quán)”,簡(jiǎn)單的“商品入庫(kù)”等等。需要注意的是,Eric Evans的職責(zé)層中的Operation應(yīng)當(dāng)理解為“核心業(yè)務(wù)交互”。而不是“業(yè)務(wù)交互”,考慮到Potential層產(chǎn)生員工的“員工開戶”,也是一個(gè)“業(yè)務(wù)交互”,就不難理解我的意思。
對(duì)于企業(yè)級(jí)應(yīng)用,還可能存在的依賴有:
工作流-->業(yè)務(wù)交互
工作流策略-->工作流
項(xiàng)目管理-->業(yè)務(wù)交互
由于,它們可能會(huì)影響到整個(gè)“業(yè)務(wù)交互”,其基礎(chǔ)工作流引擎,基礎(chǔ)業(yè)務(wù)規(guī)則引擎,基礎(chǔ)項(xiàng)目管理構(gòu)件,都需要放入底層的包中,在其之上擴(kuò)展出的具體流程、規(guī)則和實(shí)際項(xiàng)目,將放入其依賴的具體業(yè)務(wù)交互的包里。
大體上,我接受Eric&Evans的觀點(diǎn),從8000公里上空來(lái)看,最下層是最穩(wěn)定的“潛能”、通用業(yè)務(wù)元素和通用引擎構(gòu)件,在其之上是“核心業(yè)務(wù)交互”層,它將受到施加于其上的約束、承諾層的影響,在約束和承諾層之上,是策略層,策略通過(guò)考察“業(yè)務(wù)交互”和相關(guān)的約束承諾,按照已定義的規(guī)則行事,最后,決策層負(fù)責(zé)設(shè)置這些規(guī)則。
不過(guò),正如Eric&Evans已表達(dá)的,把它看作一個(gè)指導(dǎo),而不是約束。因?yàn)椋褪窃谕粚又校粋(gè)包中,也要考慮對(duì)象間的依賴關(guān)系,另外,領(lǐng)域的自然層次結(jié)構(gòu),并不一定完全遵循這種固定的劃分模式。
總之,我希望通過(guò)考察“核心業(yè)務(wù)交互”入手,建立一個(gè)帶有強(qiáng)烈“單向依賴”傾向的積木式DomainModel,得到一種簡(jiǎn)單、明晰的優(yōu)雅領(lǐng)域構(gòu)架,它反映了領(lǐng)域的自然分層結(jié)構(gòu),因而,能從容應(yīng)付業(yè)務(wù)當(dāng)前和未來(lái)的發(fā)展變化。
安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢】