摘要:領(lǐng)域模型應(yīng)當(dāng)使用細(xì)粒度的對象,這些對象應(yīng)有細(xì)粒度的接口。它封裝了應(yīng)用的業(yè)務(wù)邏輯事務(wù)控制及其操作實(shí)現(xiàn)中的響應(yīng)協(xié)調(diào)。
1. 事務(wù)腳本 1)調(diào)用數(shù)據(jù)庫:
事務(wù)腳本將所有邏輯組成單個(gè)過程,在過程中直接調(diào)用數(shù)據(jù)庫,或者只通過一個(gè)簡單的數(shù)據(jù)庫封存器。
2)腳本處理:每個(gè)事務(wù)都有自己的事務(wù)腳本,盡管事務(wù)間的公共子任務(wù)可以被分解成多個(gè)子程序。
3)運(yùn)行機(jī)制:a.事務(wù)腳本應(yīng)該置于與其他處理表現(xiàn)層和數(shù)據(jù)源層的類相獨(dú)立的類中,把事務(wù)腳本組織成類的兩種方法:
a. 將數(shù)個(gè)事務(wù)腳本放在一個(gè)類中,每個(gè)類圍繞一個(gè)主題將相關(guān)的事務(wù)腳本組織在一起;
b. 使用Command模式,每一個(gè)事務(wù)腳本對應(yīng)一個(gè)類 (command)
4)使用時(shí)機(jī):業(yè)務(wù)邏輯簡單場景(同時(shí)注意謹(jǐn)慎提取公共子程序以減少代碼冗余),當(dāng)業(yè)務(wù)復(fù)雜時(shí)則需要建立領(lǐng)域模型
5)優(yōu)點(diǎn):當(dāng)問題本身是簡單的時(shí),使用事務(wù)腳本可以加快開發(fā)速度,而且運(yùn)行更快
6)示例:假如有如下需求:
數(shù)據(jù)庫設(shè)計(jì)為:
其中,RevenueRecognition表引用Contract表的Id作為外鍵。根據(jù)需求和數(shù)據(jù)庫設(shè)計(jì),事務(wù)腳本類圖設(shè)計(jì)為:
這里,Gateway為數(shù)據(jù)庫訪問封存器,RecognitionServices為事務(wù)腳本類。CalculateRevenueRecognitions方法用于計(jì)算并保存需入賬信息(合同編號(hào)、時(shí)間、收費(fèi)金額),RecognizedRevenue用于按照合同編號(hào)、指定日期查詢已收費(fèi)用。應(yīng)用程序只需要分別單個(gè)調(diào)取這2個(gè)方法即可。
2. 領(lǐng)域模型 1)運(yùn)行機(jī)制領(lǐng)域模型與數(shù)據(jù)庫模型的區(qū)別:領(lǐng)域模型混合數(shù)據(jù)和處理過程,擁有多值屬性和復(fù)雜的關(guān)聯(lián)網(wǎng),并且使用繼承、策略、設(shè)計(jì)模式,是一張由互聯(lián)的細(xì)粒度對象組成的復(fù)雜網(wǎng)絡(luò);
使用領(lǐng)域邏輯的一個(gè)常見問題: 領(lǐng)域?qū)ο筮^于臃腫,可能會(huì)產(chǎn)生冗余代碼
數(shù)據(jù)庫映射:簡單領(lǐng)域模型可以使用活動(dòng)記錄,而復(fù)雜領(lǐng)域模型需要使用數(shù)據(jù)映射器。
領(lǐng)域模型應(yīng)當(dāng)使用細(xì)粒度的對象,這些對象應(yīng)有細(xì)粒度的接口。
2)使用時(shí)機(jī)當(dāng)業(yè)務(wù)規(guī)則復(fù)雜多變,涉及到校驗(yàn)、計(jì)算、衍生時(shí)。
數(shù)據(jù)庫交互方式:首選數(shù)據(jù)映射器
3)示例:對于上文中需求,設(shè)計(jì)類圖如下:
可以看到,這里收費(fèi)方式使用了策略模式。
3. 表模塊表模塊以一個(gè)類對應(yīng)數(shù)據(jù)庫中的一個(gè)表來組織領(lǐng)域邏輯,而且使用單一的類實(shí)例來包含將對數(shù)據(jù)進(jìn)行的各種操作程序。
表模塊與領(lǐng)域邏輯的區(qū)別:如果有多個(gè)訂單,領(lǐng)域模型對每個(gè)訂單都有一個(gè)對象,而表模塊則只用一個(gè)對象來處理所有訂單(表模塊沒有標(biāo)識(shí)符來標(biāo)出它所代表的實(shí)體對象)。
1)運(yùn)行機(jī)制長處:允許你將數(shù)據(jù)與行為封裝在一起,同時(shí)有可以充分利用關(guān)系數(shù)據(jù)庫的優(yōu)點(diǎn)
2)使用時(shí)機(jī)當(dāng)使用記錄集存取表數(shù)據(jù)時(shí)使用(表模塊很大程度上依賴于以表方式組織的數(shù)據(jù))
設(shè)計(jì)類圖如下:
服務(wù)層定義了應(yīng)用的邊界和從接口客戶層角度所能看到的可用操作集。它封裝了應(yīng)用的業(yè)務(wù)邏輯、事務(wù)控制及其操作實(shí)現(xiàn)中的響應(yīng)協(xié)調(diào)。
業(yè)務(wù)邏輯分類:領(lǐng)域邏輯、應(yīng)用邏輯
兩種基本的實(shí)現(xiàn)方法:
領(lǐng)域外觀方法:
服務(wù)層以領(lǐng)域模型之上的瘦外觀集合方式實(shí)現(xiàn)(負(fù)責(zé)實(shí)現(xiàn)外觀的類不包含任何業(yè)務(wù)邏輯,所有業(yè)務(wù)邏輯均由領(lǐng)域模型實(shí)現(xiàn))
操作腳本方法:
服務(wù)層由一組相對復(fù)雜的類組成,這些類直接實(shí)現(xiàn)應(yīng)用邏輯,但將領(lǐng)域邏輯委托給封裝好的領(lǐng)域?qū)ο箢?/p>
服務(wù)層接口時(shí)粗粒度的,必要時(shí)候可以遠(yuǎn)程調(diào)用(在服務(wù)層之上增加遠(yuǎn)程外觀或者直接讓服務(wù)層實(shí)現(xiàn)遠(yuǎn)程接口)
它定義了一個(gè)公共的應(yīng)用操作集合,這個(gè)集合可被各種客戶使用,而且服務(wù)層在每個(gè)操作中都會(huì)協(xié)調(diào)應(yīng)用的響應(yīng)。
當(dāng)業(yè)務(wù)邏輯有多種客戶,或者用例響應(yīng)中的多個(gè)事務(wù)性資源,則需要服務(wù)層
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30075.html
摘要:運(yùn)行機(jī)制表數(shù)據(jù)入口包含了用于訪問單個(gè)表或試圖的所有,如選擇插入更新刪除等。其他代碼調(diào)用它的方法來實(shí)現(xiàn)所有與數(shù)據(jù)庫的交互。示例如下圖分別是普通情況下充分利用特征下的表數(shù)據(jù)入口實(shí)現(xiàn)行數(shù)據(jù)入口充當(dāng)數(shù)據(jù)源中單條記錄入口的對象,每行一個(gè)實(shí)例。 1. 表數(shù)據(jù)入口 充當(dāng)數(shù)據(jù)庫表訪問入口的對象,一個(gè)實(shí)例處理表中所有的行。 1)運(yùn)行機(jī)制: 表數(shù)據(jù)入口包含了用于訪問單個(gè)表或試圖的所有SQL,如...
摘要:模型抉擇領(lǐng)域邏輯復(fù)雜度抉擇領(lǐng)域邏輯復(fù)雜度較低時(shí),選擇事物腳本如果開發(fā)環(huán)境擁有大量基于記錄集的工具和,可以選擇表模塊開發(fā)小組經(jīng)驗(yàn)豐富時(shí),選擇領(lǐng)域模型種模式并不互相排斥,可以同時(shí)使用服務(wù)層服務(wù)層是從領(lǐng)域?qū)臃蛛x出來的,用于置于底層的領(lǐng)域模型或表模 1. 模型抉擇: 1)領(lǐng)域邏輯復(fù)雜度: showImg(https://segmentfault.com/img/remote/1460000...
摘要:如果數(shù)據(jù)非常類似,可把數(shù)據(jù)從內(nèi)存方案中轉(zhuǎn)化到邏輯數(shù)據(jù)存儲(chǔ)方案,映射從邏輯數(shù)據(jù)存儲(chǔ)方案到實(shí)際物理存儲(chǔ)方案第二部包含區(qū)別使用元數(shù)據(jù)元數(shù)據(jù)映射基于把映射濃縮到元數(shù)據(jù)文件的方法。元數(shù)據(jù)文件詳細(xì)描述數(shù)據(jù)庫中列如何映射到對象的域。 關(guān)系數(shù)據(jù)庫之所以取得成功,最重要的原因之一就是SQL的存在,它是數(shù)據(jù)庫通信標(biāo)準(zhǔn)語言。 1. 架構(gòu)模式: 驅(qū)動(dòng)領(lǐng)域邏輯訪問數(shù)據(jù)的方式: SQL語句嵌入在程序設(shè)計(jì)語言中; ...
摘要:企業(yè)應(yīng)用在某些方面要比電信軟件簡單得多多線程問題沒有那么困難,無需關(guān)注硬件設(shè)備與軟件的集成。但是,在某些方面,企業(yè)應(yīng)用又比電信軟件復(fù)雜得多企業(yè)應(yīng)用一般都涉及到大量復(fù)雜數(shù)據(jù),而且必須處理很多不合邏輯的業(yè)務(wù)規(guī)則。 構(gòu)建計(jì)算機(jī)系統(tǒng)并非易事。隨著系統(tǒng)復(fù)雜性的增大,構(gòu)建相應(yīng)軟件的難度將呈指數(shù)增大。 同其他行業(yè)一樣,我們只有在不斷的學(xué)習(xí)中進(jìn)步,從成功經(jīng)驗(yàn)中學(xué)習(xí),從失敗教訓(xùn)中學(xué)習(xí),才有望克服這些困難...
摘要:相反,它由單體中的適配器和使用一個(gè)或多個(gè)進(jìn)程間通信機(jī)制的服務(wù)組成。因?yàn)槲⒎?wù)架構(gòu)的本質(zhì)是一組圍繞業(yè)務(wù)功能組織的松耦合服務(wù)。如果你嘗試將此類功能實(shí)現(xiàn)為服務(wù),則通常會(huì)發(fā)現(xiàn),由于過多的進(jìn)程間通信而導(dǎo)致性能下降。這是快速展示微服務(wù)架構(gòu)價(jià)值的好方法。你很有可能正在處理大型復(fù)雜的單體應(yīng)用程序,每天開發(fā)和部署應(yīng)用程序的經(jīng)歷都很緩慢而且很痛苦。微服務(wù)看起來非常適合你的應(yīng)用程序,但它也更像是一項(xiàng)遙不可及的必殺...
閱讀 2040·2021-11-08 13:14
閱讀 2946·2021-10-18 13:34
閱讀 2036·2021-09-23 11:21
閱讀 3599·2019-08-30 15:54
閱讀 1768·2019-08-30 15:54
閱讀 2937·2019-08-29 15:33
閱讀 2593·2019-08-29 14:01
閱讀 1954·2019-08-29 13:52