Domain Model 再再重新設(shè)計(jì)其實(shí)這種設(shè)計(jì)某種意義上也沒有什么問題,至少在短消息系統(tǒng)中,因?yàn)榘l(fā)消息本身就是用戶的一種行為,但是如果仔細(xì)一想就會覺得有些別扭,首先賬戶轉(zhuǎn)賬業(yè)務(wù)流程和發(fā)消息業(yè)務(wù)流程雖然表面上相似,但是其聚合的對象并不相同,比如賬戶轉(zhuǎn)賬示例中,聚合的是賬戶,發(fā)消息業(yè)務(wù)場景中如果這樣分析應(yīng)該聚合的是用戶,但是很顯然并不是,聚合的是消息對象,如果聚合用戶就會變成用戶消息系統(tǒng)了,這就偏離了大方向,并不是我們所想看到的。還有就是現(xiàn)在的這種設(shè)計(jì)只適用于短消息業(yè)務(wù)場景,在郵件和短信業(yè)務(wù)場景中并不適用,為什么?因?yàn)猷]件發(fā)送和短信發(fā)送并不存在用戶的概念(這個(gè)用戶概念并不是現(xiàn)實(shí)生活中的人,而是系統(tǒng)中的用戶,這個(gè)觀點(diǎn)很容易造成誤解),有的只是一個(gè)標(biāo)識(電子郵件或手機(jī)號),用來體現(xiàn)出發(fā)件人和收件人的概念,也就是說這種標(biāo)識并不是一個(gè)對象(沒有行為的對象),準(zhǔn)確的來說應(yīng)該不是一個(gè)實(shí)體,那是什么?在領(lǐng)域驅(qū)動設(shè)計(jì)中設(shè)計(jì)為值對象(為什么要設(shè)計(jì)成值對象,后面領(lǐng)域模型設(shè)計(jì)中進(jìn)行說明),一個(gè)沒有行為的對象中加入行為操作,本身邏輯就存在問題,企業(yè)宣傳片制作所以這種設(shè)計(jì)是有問題的。回到發(fā)消息這個(gè)業(yè)務(wù)用例上,一個(gè)消息對象存在意義的前提是擁有標(biāo)題、內(nèi)容、發(fā)送人(標(biāo)識)和接收人(標(biāo)識),當(dāng)然還存在一些選填元素,但是主要包含這四個(gè)元素,缺少任何一種,就不是一個(gè)完整的消息對象,也就是說不能用來發(fā)送。發(fā)送操作不僅僅是一個(gè)對象的行為,而應(yīng)該是消息領(lǐng)域模型提供的一種服務(wù),也就是領(lǐng)域服務(wù),提供各種消息發(fā)送的服務(wù),這一點(diǎn)很容易和基礎(chǔ)層的消息發(fā)送服務(wù)搞混,區(qū)分他們只需要記住一點(diǎn):基礎(chǔ)層是技術(shù)上的實(shí)現(xiàn),領(lǐng)域是業(yè)務(wù)上的抽象,因?yàn)檫@個(gè)業(yè)務(wù)場景是消息系統(tǒng),那發(fā)消息就是一種業(yè)務(wù)用例,怎樣拍照才最美 怎樣為女性拍攝好倩影,而并不是一個(gè)技術(shù)調(diào)用方法。說了這么多,總結(jié)一下所描述的消息業(yè)務(wù)場景:抽象所有消息業(yè)務(wù)邏輯(包含短消息、公司宣傳片拍攝郵件和短信等),應(yīng)用具體的業(yè)務(wù)場景(比如短消息)。發(fā)消息業(yè)務(wù)用例:發(fā)送人(系統(tǒng)用戶)填寫消息,包含標(biāo)題、內(nèi)容、公司宣傳片拍攝發(fā)送人(標(biāo)識)、接收人(標(biāo)識),調(diào)用(應(yīng)用層發(fā)送請求)服務(wù)(領(lǐng)域服務(wù))發(fā)送消息,相當(dāng)于郵遞員投遞信件,就是這樣的一個(gè)過程,至少聽起來這么簡單,實(shí)現(xiàn)起來呢?我覺得那是另一方面的問題了,呵呵。回顧之前領(lǐng)域模型的設(shè)計(jì),你會發(fā)現(xiàn)完全是一套一套的,也就是說差別很大,造成這種設(shè)計(jì)的主要原因是領(lǐng)域模型中的邊界和職責(zé)問題,這也是領(lǐng)域模型設(shè)計(jì)中最難的一點(diǎn),如果邊界確定和職責(zé)分配和上一版本有細(xì)微的差別,那設(shè)計(jì)出來的領(lǐng)域模型會和上一版本完全不一樣,就比如用戶的邊界確定(是實(shí)體?還是值對象?),還有就是倉儲的職責(zé)問題(領(lǐng)域還是應(yīng)用層?),如果不確定這些因素,設(shè)計(jì)出來的領(lǐng)域模型就不是真正的領(lǐng)域模型。那為什么要把發(fā)送人(標(biāo)識)或接收人(標(biāo)識)設(shè)計(jì)成值對象?那我們分析一下消息系統(tǒng)中收發(fā)件人,首先需要明確一點(diǎn)的就是,我們設(shè)計(jì)的是消息系統(tǒng),并非是用戶消息系統(tǒng),也就是說把用戶中的行為剔除掉(SendMessage 和 ReceiveMessage),對象除掉行為之后就只有屬性了,如果一個(gè)實(shí)體中只有屬性,是不是所必要的呢?對于消息系統(tǒng)而言,用戶是不被存儲的,也就是說用戶只是在消息系統(tǒng)中作為一個(gè)標(biāo)識,所謂標(biāo)識就是所表現(xiàn)出來的一個(gè)值。在短消息業(yè)務(wù)場景中也是類似,因?yàn)槎滔⑾到y(tǒng)中的用戶概念來自于其他系統(tǒng),那其他系統(tǒng)對于用戶而言肯定有一個(gè)唯一標(biāo)識(比如主鍵值、用戶名、顯示名等等),對于消息系統(tǒng)而言,我只要知道這個(gè)標(biāo)識就行了,好賣 馮小剛談中式大片。至于這個(gè)標(biāo)識所代表的是哪個(gè)用戶,并不需要關(guān)心。把發(fā)送人(標(biāo)識)或接收人(標(biāo)識)設(shè)計(jì)成值對象,還有一個(gè)重要原因是,如果把發(fā)送人(標(biāo)識)或接收人(標(biāo)識)設(shè)計(jì)成實(shí)體,那他們可以獨(dú)立于消息實(shí)體存在,但是我們所設(shè)計(jì)的是消息系統(tǒng),并不是用戶消息系統(tǒng),用戶來自于外部,如果在消息系統(tǒng)中單獨(dú)存在就有點(diǎn)不倫不類了,還有就是如果用戶設(shè)計(jì)成實(shí)體,這些用戶實(shí)體對象是需要存儲的,這就違背了我們的業(yè)務(wù)需求。BBC生命Life生命脈動紀(jì)錄片下載地址如果把用戶設(shè)計(jì)成值對象呢?就符合我們現(xiàn)在的消息業(yè)務(wù)場景了,因?yàn)樵谙⑾到y(tǒng)中,我們只需要知道用戶是什么,而且用戶獨(dú)立于消息,對于消息系統(tǒng)而言將沒有任何意義。