正文

業(yè)務(wù)邏輯層:組織(26)

ASP.NET設(shè)計(jì)模式 作者:(美)Scott Millett


試圖在軟件中解決復(fù)雜業(yè)務(wù)問題非常困難,但使用Domain Model模式時(shí),首先為真實(shí)的業(yè)務(wù)模型創(chuàng)建一個(gè)抽象的模型。有了這個(gè)模型之后,就可以對復(fù)雜邏輯進(jìn)行建模:追蹤真實(shí)的領(lǐng)域并在領(lǐng)域模型中重建工作流和處理流程。與Transaction Script模式和Active Record模式相比,Domain Model模式的另一個(gè)優(yōu)勢是,由于它不包含數(shù)據(jù)訪問代碼,因此可以很容易地進(jìn)行單元測試而不必模擬并隔離數(shù)據(jù)訪問層所依賴的類。另外,Domain Model模式可能并不總能匹配應(yīng)用程序需求。它的強(qiáng)大之處在于處理復(fù)雜的業(yè)務(wù)邏輯,但對于只包含非常少量業(yè)務(wù)邏輯的應(yīng)用程序而言,采用一個(gè)全方位的領(lǐng)域模型有大材小用之嫌。該模式的另一個(gè)不足之處在于,與Active Record和Transaction Script模式相比,為了精通領(lǐng)域模型模式,需要面臨陡峭的學(xué)習(xí)曲線。需要很多時(shí)間和經(jīng)驗(yàn)才能高效地使用該模式,而且最重要的是,需要對正在試圖建模的業(yè)務(wù)領(lǐng)域有全面的了解。

4.1.4  Anemic Domain Model

Anemic Domain Model有時(shí)候被稱為一種反模式。初看起來,該模式與Domain Model模式非常類似,仍會找到表示業(yè)務(wù)領(lǐng)域的領(lǐng)域?qū)ο蟆5@些領(lǐng)域?qū)ο笾胁话魏涡袨?。相反,這些行為位于模型之外,而讓領(lǐng)域?qū)ο笞鳛楹唵蔚臄?shù)據(jù)傳輸類。

這種模式的主要不足之處在于,領(lǐng)域服務(wù)扮演更加過程式的代碼,與本章開頭看過的Transaction Script模式比較類似,這會帶來一些與之相關(guān)的問題。其中一個(gè)問題就是違背了“講述而不要詢問”原則,也就是對象應(yīng)該告訴客戶它們能夠做什么或不能夠做什么,而不是暴露屬性并讓客戶端來決定某個(gè)對象是否處于執(zhí)行給定動(dòng)作所需的狀態(tài)。

如果考慮用于領(lǐng)域模型練習(xí)的示例,那么領(lǐng)域?qū)ο骉ransaction和BankAccount的邏輯現(xiàn)在被剝離出來,它們只是數(shù)據(jù)容器,代碼如下:


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號