领域逻辑的组织模式
C“領(lǐng)域邏輯組織可以分為三種主要的模式:事務(wù)腳本(Transaction Script)、領(lǐng)域模型(Domain Model)和表模塊(Table Module)”
事務(wù)腳本 Transaction Script
使用過(guò)程來(lái)組織業(yè)務(wù)邏輯,每個(gè)過(guò)程處理來(lái)自表現(xiàn)層的單個(gè)請(qǐng)求。大多數(shù)應(yīng)用都可以被看作是一系列事務(wù)。一個(gè)事務(wù)可能將某種信息看作是以特定方式組織的,然后另一事務(wù)則會(huì)改變它。在客戶系統(tǒng)和服務(wù)器系統(tǒng)這間的每次交互都包含一定數(shù)量的邏輯。它可能如顯示數(shù)據(jù)庫(kù)中的信息那般簡(jiǎn)單。蛤在其他一些情況下,它可能涉及許多校驗(yàn)和計(jì)算的步驟。事務(wù)腳本將所有這些邏輯組成成單個(gè)過(guò)程,在過(guò)程中直接調(diào)用數(shù)據(jù)庫(kù),或者只通過(guò)一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)封裝器。每個(gè)事務(wù)都有自己的事務(wù)腳本,盡管事務(wù)間的公共子任務(wù)可以被分解成多個(gè)子程序。
事務(wù)腳本組織成類的方法
將數(shù)個(gè)事務(wù)腳本放在一個(gè)類中,每個(gè)類圍繞一個(gè)主題將相關(guān)的事務(wù)腳本組織在一起。(最常用)
每一個(gè)事務(wù)腳本對(duì)應(yīng)一個(gè)類,此時(shí)需使用命令(Command)模式。使用時(shí)機(jī)
事務(wù)腳本勝在簡(jiǎn)單。對(duì)于只有少量邏輯的應(yīng)用程序來(lái)說(shuō),使用這一模式非常自然,無(wú)論在性能上還是理解上都不會(huì)帶來(lái)太大開銷。
當(dāng)業(yè)務(wù)邏輯越來(lái)越復(fù)雜時(shí),該模式就會(huì)越來(lái)越難以保持良好的設(shè)計(jì)。它特有的問題是事務(wù)之間的冗余代碼。
領(lǐng)域模型 Domain Model)
合并了行為和數(shù)據(jù)的領(lǐng)域的對(duì)象模型。在應(yīng)用程序中使用領(lǐng)域模型需要建立一個(gè)完整的由對(duì)象組成的層,來(lái)對(duì)目標(biāo)業(yè)務(wù)領(lǐng)域建模。 你會(huì)發(fā)現(xiàn)其中有的對(duì)象模擬業(yè)務(wù)活動(dòng)中的數(shù)據(jù),有的對(duì)象捕捉業(yè)務(wù)使用的規(guī)則。數(shù)據(jù)和處理一般整合在一起,從而使得數(shù)據(jù)和數(shù)據(jù)之上的操作緊密聚合。
面向?qū)ο蟮念I(lǐng)域模型通常看起來(lái)與數(shù)據(jù)庫(kù)模型類似,但仍有許多不同之處。領(lǐng)域模型混合數(shù)據(jù)和處理過(guò)程,擁有多值和復(fù)雜的的關(guān)聯(lián)網(wǎng),并且使用繼承。
領(lǐng)域模型衍生出兩種風(fēng)格。簡(jiǎn)單領(lǐng)域模型看起來(lái)與數(shù)據(jù)庫(kù)設(shè)計(jì)很類似,這種設(shè)計(jì)中幾乎每一個(gè)數(shù)據(jù)庫(kù)表都與一個(gè)領(lǐng)域?qū)ο髮?duì)應(yīng)。而復(fù)雜領(lǐng)域模型則與數(shù)據(jù)庫(kù) 設(shè)計(jì)不同,它使用繼承、策略和其他設(shè)計(jì)模式,是一張由互聯(lián)的細(xì)粒度對(duì)象組成的復(fù)雜網(wǎng)絡(luò),復(fù)雜的領(lǐng)域模型更適合于復(fù)雜的邏輯,但它于數(shù)據(jù)庫(kù)的映射比較 困難。
由于業(yè)務(wù)行為是經(jīng)常變化的。因此易于修改、建造和測(cè)試對(duì)領(lǐng)域?qū)觼?lái)說(shuō)十分重要。因而,領(lǐng)域模型與系統(tǒng)中的其他層之間的耦合度應(yīng)達(dá)到最小。許多的分層 模式,它們的主導(dǎo)思想就是領(lǐng)域模型與系統(tǒng)中其他部分間保持盡可能小的依賴
使用時(shí)機(jī)
何時(shí)使用這一模型完全取決于系統(tǒng)中的行為復(fù)雜程度。如果你的業(yè)務(wù)規(guī)則復(fù)雜多變,涉及檢驗(yàn)、計(jì)算、衍生,你就應(yīng)該利用對(duì)象模型進(jìn)行處理, 反之,如果你只有一些簡(jiǎn)單的判空值和少量的求和計(jì)算,事務(wù)腳本是一個(gè)更佳的選擇。
影響選擇的因素之一是開發(fā)小組靈活運(yùn)用領(lǐng)域?qū)ο蟮某潭取W(xué)會(huì)如何使用領(lǐng)域模型是極為重要的,故而出現(xiàn)了許多”理論體系遷移?方面的文章,它們都是關(guān)于 對(duì)象使用的。要熟悉領(lǐng)域模型需要實(shí)踐和訓(xùn)練,但是一旦掌握了它,我發(fā)現(xiàn)處理解決最簡(jiǎn)單的問題外,很少會(huì)有人再使用事務(wù)腳本。
使用領(lǐng)域模型時(shí),你可能會(huì)考慮設(shè)立一個(gè)服務(wù)層,以便給領(lǐng)域模型一個(gè)更清晰的API。
表模塊 Table Module
表模塊以一個(gè)類對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一個(gè)表來(lái)組織領(lǐng)域邏輯,而且使用單一的類實(shí)例來(lái)包含將對(duì)數(shù)據(jù)進(jìn)行的程序種操作程序。
使用時(shí)機(jī)
最常使用這一模式的場(chǎng)合是在Microsoft的COM設(shè)計(jì)方案中。在COM(及.net)中,記錄集是應(yīng)用程序的主要數(shù)據(jù)倉(cāng)庫(kù)。ADO 庫(kù)提供了良好的機(jī)制,可供你以記錄集的方式來(lái) 存取關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
?
轉(zhuǎn)載于:https://juejin.im/post/5c35b0c16fb9a049ab0dcd9a
總結(jié)
- 上一篇: saiku、mondrian前奏之——立
- 下一篇: Java基础 之软引用、弱引用、虚引用