已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
碩士學(xué)位論文 (專業(yè)學(xué)位) 姓 名: 學(xué) 號: 所在院系:軟件學(xué)院 職業(yè)類別:工程碩士 專業(yè)領(lǐng)域:軟件工程 指導(dǎo)教師: 副指導(dǎo)教師: 二一三年 九 月 基于 領(lǐng)域驅(qū)動設(shè)計與實現(xiàn) A in 2010 F N 2013 基于 領(lǐng)域驅(qū)動設(shè)計與實現(xiàn) 同濟大學(xué) 學(xué)位論文版權(quán)使用授權(quán)書 本人完全了解同濟大學(xué)關(guān)于收集、保存、使用學(xué)位論文的規(guī)定,同意如下各項內(nèi)容:按照學(xué)校要求提交學(xué)位論文的印刷本和電子版本;學(xué)校有權(quán)保存學(xué)位論文的印刷本和電子版,并采用影印、縮印、掃描、數(shù)字化或其它手段保存論文;學(xué)校有權(quán)提供目錄檢索以及提供本學(xué)位論文全文或者部分的閱覽服務(wù);學(xué)校有權(quán)按有關(guān)規(guī)定向國家有關(guān)部門或者機構(gòu)送交論文的復(fù)印件和電子版;在不以贏利為目的的前提下,學(xué)校可以適當(dāng)復(fù)制論文的部分或全部內(nèi)容用于學(xué)術(shù)活動。 學(xué)位論文作者簽名: 年 月 日 同濟大學(xué)學(xué)位論文原創(chuàng)性聲明 本人鄭重聲明:所呈交的學(xué)位論文,是本人在導(dǎo)師指導(dǎo)下,進行研究工作所取得的成果。除文中已經(jīng)注明引用的內(nèi)容外,本學(xué)位論文的研究成果不包含任何他人創(chuàng)作的、已公開發(fā)表或者沒有公開發(fā)表的作品的內(nèi)容。對本論文所涉及的研究工作做出貢獻的其他個人和集體,均已在文中以明確方式標(biāo)明。本學(xué)位論文原創(chuàng)性聲明的法律責(zé)任由本人承擔(dān)。 學(xué)位論文作者簽名: 年 月 日 同濟大學(xué) 碩士學(xué)位論文 摘要 I 摘要 軟件系統(tǒng)面向?qū)ο蟮脑O(shè)計思想可謂歷史悠久, 20 世紀(jì) 70 年代的 到今天我們依然將這門語言視為面向?qū)ο笳Z言的基礎(chǔ) , 但是面向?qū)ο笳Z言并不是 萬能的 ,如果開發(fā)人員認(rèn)為使用面向?qū)ο笳Z言寫出來的程度本身就是面向?qū)ο蟮?,那就大錯特錯了,實際開發(fā)中,大量的業(yè)務(wù)邏輯堆積在一個巨型類中的例子屢見不鮮,代碼的復(fù)用性和擴展性無法得到保證。為了解決這樣的問題,領(lǐng)域驅(qū)動設(shè)計提出了清晰的分層架構(gòu)和領(lǐng)域?qū)ο蟮母拍?,讓面向?qū)ο蟮姆治龊驮O(shè)計進入了一個新的階段,對企業(yè)級軟件開發(fā)起到了巨大的推動作用 。 從領(lǐng)先的軟件設(shè)計人員開始將領(lǐng)域驅(qū)動建模以及設(shè)計是為關(guān)鍵性課題到現(xiàn)在也有多年的歷史了。然而,目前國內(nèi)卻也幾乎沒有相關(guān)的文獻來告訴大家應(yīng)該做什么和如何做,盡管領(lǐng)域驅(qū)動建模和設(shè)計并沒有被明確化,然而在對象領(lǐng)域中出現(xiàn)了一種潛在的哲學(xué)體系,它就是我們所說的領(lǐng)域驅(qū)動設(shè)計 ( 本文 主要介紹了領(lǐng)域驅(qū)動設(shè)計的基本概念、要素和特點,并 嘗試 通過設(shè)計一個 一個精簡的電子 唱片商店 系統(tǒng)來展示 領(lǐng)域驅(qū)動設(shè)計開發(fā)方法 的設(shè)計過程那個和理念。首先,從一步步構(gòu)建 領(lǐng)域通用語言 ( 開始 , 然后建立具體的領(lǐng)域模型, 并且通過分析和解決領(lǐng)域模型中的關(guān)鍵性問題精細化領(lǐng)域模型,通過使用經(jīng)典 架來實現(xiàn)該系統(tǒng)。根據(jù)框架的需要,先是搭建了領(lǐng)域核心模型,最后劃分了領(lǐng)域服務(wù),并且實踐了 從測試驅(qū)動 (行為驅(qū)動 (發(fā) 來驗證 領(lǐng)域模型 的業(yè)務(wù)邏輯 ,在文中,會使用到 依賴注入等概念 。 整個設(shè)計都充分 突出 和體現(xiàn)了 領(lǐng)域驅(qū)動設(shè)計開發(fā)方法的一個完整流程和設(shè)計理念。 關(guān)鍵詞 : I he a in 970 s, be as we as is It is in is In of of in s be In to a of a it a in t a as a is to to do to is is a In I am to an of to at to by a to of in it in in to we in on I VC in I to of in 碩士學(xué)位論文 目錄 錄 第 1章 引言 . 1 題背景與意 義 . 1 內(nèi)外發(fā)展現(xiàn)狀 . 1 課題的主要研究內(nèi)容 . 2 文的組織結(jié)構(gòu) . 2 第 2章 相關(guān)理論介紹 . 4 . 4 域驅(qū)動設(shè)計概述 . 4 . 5 . 6 . 7 . 8 . 8 . 9 . 10 . 11 . 11 架 . 12 ( . 20 現(xiàn)層實現(xiàn) . 22 術(shù) . 26 續(xù)集成技術(shù)概述 . 26 術(shù)的實現(xiàn) . 28 章小結(jié) . 29 第 3章 構(gòu)建領(lǐng)域模型 . 30 何構(gòu)建通用語言 . 30 話場景模擬構(gòu)建通用語言 . 30 勒模型 . 32 化領(lǐng)域模型問題 . 34 . 34 個地分析領(lǐng)域中的問題點 . 35 建系統(tǒng)權(quán)限管理模型 . 42 同濟大學(xué) 碩士學(xué)位論文 目錄 實現(xiàn) . 42 . 44 . 45 I(用戶界面)原型 . 45 . 46 . 46 . 46 . 54 章小結(jié) . 54 第 4章 實現(xiàn)領(lǐng)域核心模型 . 56 統(tǒng)架構(gòu)回顧 . 56 . 56 . 58 分領(lǐng)域服務(wù) . 61 存服務(wù)詳細設(shè)計與實現(xiàn) . 61 單管理服務(wù)詳細設(shè)計與實現(xiàn) . 64 . 67 物車服務(wù)設(shè)計與實現(xiàn) . 68 告信息服務(wù) . 70 章小結(jié) . 70 第 5章 應(yīng)用 . 71 踐 . 71 . 72 過 華領(lǐng)域模型中的 . 73 踐 . 79 建 試環(huán)境 . 80 用 試服務(wù) . 81 章小結(jié) . 85 第 6章 基礎(chǔ)設(shè)施層和表現(xiàn)層的實現(xiàn) . 86 久化架構(gòu)的需求 . 86 用 . 86 實現(xiàn) . 91 他公共實用方法的實現(xiàn) . 94 . 94 I. 96 第 7章 總結(jié)與展望 . 102 結(jié) . 102 望 . 103 同濟大學(xué) 碩士學(xué)位論文 目錄 V 致謝 . 104 參考文獻 . 105 個人簡歷、在讀期間發(fā)表的學(xué)術(shù)論文與研究成果 . 106 第 1章 引言 1 第 1 章 引言 題 背景與 意義 眾所周知, 應(yīng)用軟件是為滿足用戶不同領(lǐng)域、不同問題的應(yīng)用需求而提供的 ,也就是說,軟件本身的價值所在主要是實現(xiàn)領(lǐng)域邏輯,幫助用戶處理領(lǐng)域問題的。然而,在企業(yè)級應(yīng)用 的開發(fā)工作中, 開發(fā)人員對領(lǐng)域業(yè)務(wù)的認(rèn)識,和對領(lǐng)域知識的獲得,往往比不上領(lǐng)域?qū)<摇i_發(fā)人員最熟悉的是技術(shù),這就導(dǎo)致最后 在設(shè)計軟件的時候, 開發(fā)人員 趨向于一種以技術(shù)為先導(dǎo)的過程。因為軟件的領(lǐng)域需求傳遞到開發(fā)團隊 后,開發(fā)人員依據(jù)需求上的描述創(chuàng)造出最有可能的假想。在瀑布開發(fā)模型中,我們需不停校對,復(fù)核需求分析文檔,盡最大的努力將一份完美的文檔移交給開發(fā)人員,然后開發(fā)人員根據(jù)文檔,以他們的思維設(shè)計出一套能夠運行的軟件;每當(dāng)需求發(fā)生變更時,開發(fā)人員都會十分頭疼和煩惱,難免就可以聽到很多開發(fā)人員的怨氣聲。 領(lǐng)域驅(qū)動的設(shè)計是一種截然不同的設(shè)計方法學(xué),它知道需求是永遠不是一成不變的,需求是一個活的文檔,它把軟件系統(tǒng)當(dāng)作業(yè)務(wù)過程的一個影射,是 使能動,而不是驅(qū)動 1。領(lǐng)域驅(qū)動設(shè)計是要你深入到業(yè)務(wù)過程中,了解業(yè)務(wù)術(shù)語和實踐方法。技術(shù)方面的事被放在了第二位,只是最終的一種手段而已。 領(lǐng)域驅(qū)動設(shè)計是敏捷方法的終極表達 ,它是用來處理不斷變化和發(fā)展的需求。 正如任何一個從未涉足軟件項目的人都知道一個項目的需求從開始到結(jié)束保持一成不變是極其罕見的,絕大多數(shù)情況是它會隨著業(yè)務(wù)的增長和變化而變化2。 內(nèi)外發(fā)展現(xiàn)狀 在傳統(tǒng)的開發(fā)工作中,開發(fā)人員趨向于一種以技術(shù)為先導(dǎo)的過程,需求從業(yè)務(wù)方傳遞到開發(fā)團隊,然后,開發(fā)人員依據(jù)需求上的描述創(chuàng)造出最有可能的假想 。在瀑布開發(fā)模型中,我們需不停校對,復(fù)核需求分析文檔,盡最大的努力將一份完美的文檔移交給開發(fā)人員,然后開發(fā)人員根據(jù)文檔,以他們的思維設(shè)計出一套能夠運行的軟件;每當(dāng)需求發(fā)生變更時,開發(fā)人員都會十分頭疼和煩惱,難免就可以聽到很多開發(fā)人員的怨氣聲。 然而,領(lǐng)域驅(qū)動的設(shè)計是一種截然不同的設(shè)計方法學(xué),它知道需求是永遠不是一成不變的,需求是一個活的文檔,它把軟件系統(tǒng)當(dāng)作業(yè)務(wù)過程的一個影射,同濟大學(xué) 碩士學(xué)位論文 基于 設(shè)計與實現(xiàn) 2 是使能動,而不是驅(qū)動。領(lǐng)域驅(qū)動設(shè)計是要你深入到業(yè)務(wù)過程中,了解業(yè)務(wù)術(shù)語和實踐方法。技術(shù)方面的事被放在了第二位,只是最終的一種手段而已 。 世界著名軟件建模專家 他在全球各地宣講領(lǐng)域驅(qū)動設(shè)計的思想,開設(shè)課程、參加會議、接受專訪,擁有大批的追隨者。從 20世紀(jì) 80年代開始,他就以設(shè)計師和程序員的雙重身份參與過許多大型面向?qū)ο笙到y(tǒng)的設(shè)計和開發(fā),涉及各種復(fù)雜的業(yè)務(wù)和技術(shù)領(lǐng)域 ,目前市面上也出現(xiàn)了眾多的關(guān)于 課題的主要研究內(nèi)容 這個課題的業(yè)務(wù)內(nèi)容不會過于復(fù)雜,但希望能夠通過一個相對經(jīng)典的設(shè)計,呈現(xiàn)出一個完整的以 域設(shè)計驅(qū)動 )方法開發(fā)和實現(xiàn)過程;以往我在學(xué)習(xí)微軟的開發(fā)技術(shù)的過程中 ,也發(fā)現(xiàn)微軟也經(jīng)常會以一些實際的案例來完整的展現(xiàn)他們推廣的技術(shù)如何在現(xiàn)實的開發(fā)過程中得到應(yīng)用的,譬如,以往的通過 過 展現(xiàn) 也希望這個設(shè)計可以成為一個“麻雀雖小,五臟俱全”的設(shè)計。 名思義,就是一個音樂商店,商家可以上架商品,發(fā)布商訊,客戶可以登錄到商店的網(wǎng)站上購買相關(guān)的產(chǎn)品,業(yè)務(wù)內(nèi)容可以說是三言兩語即可描述清楚的。我想結(jié)合 域設(shè)計驅(qū)動 )、 試設(shè)計驅(qū)動 )、 為設(shè)計驅(qū)動)的 設(shè)計原則搭建和實現(xiàn)它,大多情況下,我們使用的還是;軟件最終的目的是實現(xiàn)某些業(yè)務(wù)和服務(wù),軟件的最終價值就是提供人們所需要的服務(wù),科學(xué)的開發(fā)方法就是應(yīng)該直接從業(yè)務(wù)模型上驅(qū)動整個開發(fā) 3。 希望能夠結(jié)合理論,將科學(xué)的方法論應(yīng)用到一個實際的項目當(dāng)中,在這個項目里使用到的方法論,必定是可以舉一反三的 ,該設(shè)計 所使用到具體技術(shù)主要有: (一 ) 目的代碼的總體設(shè)計框架 (二 ) 目的 架,數(shù)據(jù)的持久化框架。 (三 ) 了實現(xiàn) 用 的 架。 (四 ) 了做情景測試使用的行為測試驅(qū)動框架 . (五 ) 賴注入容器 (六 ) 目的展現(xiàn)層框架 文的組織結(jié)構(gòu) 本文共分為 七 個章節(jié): 第 1章 引言 3 第一章,引言。說明了 項目的 研究意義、國內(nèi)外發(fā)展現(xiàn)狀,以及本課題的主要研究內(nèi)容 。 第二章, 相關(guān)理論 介紹 。介紹了課題研究的技術(shù)支持和理論支持,其中 涉及到的主要是 計所涉及的所有理論基礎(chǔ)和本文所使用到的相關(guān)技術(shù)和工具,本章是所有后面章節(jié)的一個理論基礎(chǔ) 。 第三章, 構(gòu)建領(lǐng)域模型。該設(shè) 計與傳統(tǒng)的設(shè)計方法有所不同,在第三章我們通過對話的模式構(gòu)建出了領(lǐng)域通用語言,并且在領(lǐng)域通用語言的基礎(chǔ)之上再構(gòu)建了領(lǐng)域模型,通過深化領(lǐng)域的分析,提出了領(lǐng)域必須解決的一些問題,并提出了解決方案。 第四章, 實現(xiàn)領(lǐng)域核心 模型 。 該設(shè)計是基于 構(gòu)設(shè)計的, 構(gòu)里最基礎(chǔ)的就是領(lǐng)域的核心模型,在第四章節(jié)中,主要完成了核心模型的實現(xiàn)和搭建 ,劃分了所有的領(lǐng)域服務(wù)。 第五章, 應(yīng)用 通過對編寫 試用例, 象接口的方式測試了第四章節(jié)中的領(lǐng)域服務(wù),并且以實際案例使用 示了 第六章, 基礎(chǔ)設(shè)施層和表現(xiàn)層。實現(xiàn)了 構(gòu)中的基礎(chǔ)設(shè)施層和表現(xiàn)層,主要使用微軟的 現(xiàn) 架,以及實現(xiàn)了 式。最后,在章節(jié)的最后,描述了展現(xiàn)層的大體實現(xiàn),主要使用 架構(gòu)。最后還是具體展示了依賴注入( 具體實現(xiàn)。 第七章,總結(jié)了自己對 及軟件工程開發(fā)學(xué)的一些理解,并提出了展望。同濟大學(xué) 碩士學(xué)位論文 基于 設(shè)計與實現(xiàn) 4 第 2 章 相關(guān) 理論 介紹 域驅(qū)動設(shè)計概述 軟 件開發(fā)通常被應(yīng)用到真實世界中已經(jīng)存在的自 動化流程,或者給真實的業(yè)務(wù)問題提供解決方案,即要自動化的業(yè)務(wù)流程或者可以用軟件解的現(xiàn)實問題 4。從一開始,我們就必需明白軟件脫胎于領(lǐng)域,并跟領(lǐng)域密切相關(guān)。軟件是由代碼最終構(gòu)成的。也許我們被代碼所誘惑,在它上面花費了太多的時間,將軟件看作是簡單的對象或者方法。 任何一個軟件都會與用戶的活動或者業(yè)務(wù)相關(guān)。用戶在其中使用程序的主要環(huán)境成為軟件的 領(lǐng)域 ,英文通常翻譯為“ 大多數(shù)的領(lǐng)域會涉及到物質(zhì)世界,譬如企業(yè)資金流管理軟件的領(lǐng)域就是貨幣和金融相關(guān)的業(yè)務(wù),領(lǐng)域的概念通常都和用戶的需求緊密相關(guān),通常和計算機 世界的概念很少有直接關(guān)系。要開發(fā)構(gòu)建一套對于用戶有價值的軟件,開發(fā)團隊必須要 從 用戶關(guān)心的這些業(yè)務(wù)活動 中提取出業(yè)務(wù)知識的主體。而這所要求的知識廣度可能是令人生畏的,信息的容量和復(fù)雜度也是令人難于想象的。而 模型 正在處理這種過載負擔(dān)的工具。 模型 是知識的一種有選擇的簡化和有意識的組織形式。一個合適的模型能夠了解信息的含義并聚焦于問題的本省 5。 領(lǐng)域模型的最終產(chǎn)物并不是設(shè)計出某種特殊的圖,譬如我們熟知的 所關(guān)心的是這個圖要表達意思。它不僅僅是某個領(lǐng)域?qū)<翌^腦中的知識,而是對相關(guān)知識進行嚴(yán)格的組織與選擇性 地一種抽象。領(lǐng)域模型也并不是盡可能去制造出一個逼真的模型,即使在我們真實的世界里的事物領(lǐng)域中,我們的模型也不過是一個仿真的創(chuàng)造物,譬如我們 在購房中心 能夠看到 房子的模型,模型的設(shè)計人員會想方設(shè)法凸顯出整個房子的亮點,以一種特殊的方式展現(xiàn)出來。領(lǐng)域建模人員也應(yīng)該如此,在設(shè)計的過程中要緊緊抓住業(yè)務(wù)重點,并將其充分體現(xiàn)在構(gòu)建的模型中。最后,這個模型圖可以表達的東西,通過代碼以及語言也是可以表述清楚的。 領(lǐng)域驅(qū)動設(shè)計中模型的作用歸納起來有以下三個用途: (一 ) 模型與設(shè)計核心的相互塑型。正是模型與實現(xiàn)之間的緊密聯(lián)系使得模型與現(xiàn) 實世界相關(guān)并且保證模型的討論分析能夠產(chǎn)生最終的軟件產(chǎn)品,即一個可運行的程序。 第 2章 相關(guān) 理論 介紹 5 (二 ) 模型是所有開發(fā)人員所使用的語言的核心。由于模型和實現(xiàn)是相互綁定的。因此開發(fā)人員可以用這種語言來討論程序。他們能夠在沒有翻譯的條件下和領(lǐng)域?qū)<疫M行交流。 (三 ) 模型用來提煉知識。模型是團隊在組織領(lǐng)域知識和辨別最感興趣的原理是一致同意的方式。在我們選擇的術(shù)語、分解概念并將它們相互聯(lián)系起來時,模型能夠反映出我們是怎么樣考慮領(lǐng)域問題的。開發(fā)人員與領(lǐng)域?qū)<覍⑿畔⒎胖糜谀P瓦@種形式中。 如果我們想要進一步細化模型設(shè)計,我們將需要闡述 計過程中 的一些構(gòu)成元素:通用語言、分層、實體、值對象、服務(wù)、模塊 、聚合、工廠和資源庫。在下面的段落中,本文將一一進行必要的闡述。 用語言 通過前面段落的介紹,模型的構(gòu)造不是憑空想象的出來的,它的構(gòu)建需要開發(fā)人員和領(lǐng)域?qū)<乙黄饏f(xié)同合作。 但是 ,他們之間的協(xié)作經(jīng)常會 由于一些基礎(chǔ)交流的障礙而存在難點。開發(fā)人員滿腦子都是類、方法、算法、模式,總是想將實際生活中的概念程序工件做對應(yīng)。 為克服這種交流方式的不同,在建立模型時,我們必須通過溝通來交換對模型和模型中涉及到的元素的想法,應(yīng)該如何連接它們,哪些是有關(guān)的,哪些不 是?在這種層次上的交流對一個成功的項目而言是極為重要的。如果一個人說了什么事情,其他的人不能理解,或者更糟的是錯誤理解成其他事情,又有什么機會來保證項目成功呢? 在設(shè)計過程中,我們傾向于使用自己的方言,但是沒有一種方言能成為一種通用的語言,因為它們都不能滿足所有的需要。在討論模型和定義模型時,我們確實需要講同一種語言。那么是哪種語言呢?開發(fā)人員的語言?領(lǐng)域?qū)<业恼Z言?介乎兩者之間的語言?領(lǐng)域驅(qū)動設(shè)計的一個核心的原則是使用一種基于模型的語言。因為模型是軟件滿足領(lǐng)域的共同點,它很適合作為這種通用語言的構(gòu)造基礎(chǔ)。 使用模型作為語言的核心骨架。要求團隊在進行所有的交流是都使用一致的語言,在代碼中也是這樣。在共享知識和推敲模型時,團隊會使用演講、文字和圖形。這兒需要確保團隊使用的語言在所有的交流形式中看上去都是一致的。因為這個原因,這種語言被稱為“ 通用語言( ” 6。 通用語言連接起設(shè)計中的所有的部分,建立了設(shè)計團隊良好工作的前提??赡軙ㄙM數(shù)周乃至數(shù)月的時間才能讓一個大規(guī)模項目的設(shè)計成型。團隊成員會發(fā)現(xiàn)一些初始的概念是不正確的或者不合適宜,或者發(fā)現(xiàn)一些需要考慮并放進總體設(shè)計中的新 的設(shè)計元素。沒有了通用語言,所有的這一切都是不可能的。 通過嘗試反映其他可選模型的其他的表述方式,可以消除這個難點。然后重構(gòu)代碼、重同濟大學(xué) 碩士學(xué)位論文 基于 設(shè)計與實現(xiàn) 6 命名類、方法和模型以適應(yīng)新的模型。使用我們能夠正常理解的普通詞匯,化解交談所使用術(shù)語之間的混亂。構(gòu)建一個類似這樣的語言會得到一個清晰的結(jié)果:模型和語言相互密切關(guān)聯(lián)。一個對語言的變更會變成對模型的變更。領(lǐng)域?qū)<視磳τ媚切┖鼙孔镜幕蛘卟贿m當(dāng)?shù)淖盅刍蛘呓Y(jié)構(gòu)來傳達對領(lǐng)域的理解。如果領(lǐng)域?qū)<也荒芾斫饽P突蛘哒Z言中的某種內(nèi)容,那么就如同是說這種內(nèi)容存在某種錯誤。從另一方面講,開發(fā)人員應(yīng)該留 意那些與他們試圖呈現(xiàn)在設(shè)計中的內(nèi)容存在二義性或者不一致的部分。 層 當(dāng)人們討論分層的時候,總是很難區(qū)分 區(qū)別,這兩個詞匯經(jīng)常被用作同義詞, 多地被認(rèn)為是物理上的分離 7錯誤 !未找到引用源。 。我們強調(diào)是無需把不同的層次放在不同計算機上運行。獨立出來的邏輯層,既可以運行在臺式計算機,也可以運行在數(shù)據(jù)庫服務(wù)器上。 當(dāng)我們創(chuàng)建一個軟件應(yīng)用時,這個應(yīng)用的很大一部分是不能直接跟領(lǐng)域關(guān)聯(lián)的,但它們是基礎(chǔ)設(shè)施的一部分或者是為軟件服務(wù) 的。最好能讓應(yīng)用中的領(lǐng)域部分盡可能少地和其他的部分摻雜在一起,因為一個典型的應(yīng)用包含了很多和數(shù)據(jù)庫訪問,文件或網(wǎng)絡(luò)訪問以及用戶界面等相關(guān)的代碼。在一個面向?qū)ο蟮某绦蛑?,用戶界面、?shù)據(jù)庫以及其他支持性代碼經(jīng)常被直接寫到業(yè)務(wù)對象中。附加的業(yè)務(wù)邏輯被嵌入到 件和數(shù)據(jù)庫腳本的行為中。之所以這樣做的某些原因是這樣可以很容易地讓事情快速工作起來。但是,當(dāng)領(lǐng)域相關(guān)的代碼被混入到其他層時,要閱讀和思考它也變得極其困難。表面看上去是對 修改,卻變成了對業(yè)務(wù)邏輯的修改。對業(yè)務(wù)規(guī)則的變更可能需要謹(jǐn)慎跟蹤用戶界面層 代碼、數(shù)據(jù)庫代碼以及其他程序元素。實現(xiàn)粘連在了一起,模型驅(qū)動對象于是變得不再可行。也很難使用自動化測試。對于每個活動中涉及到的技術(shù)和邏輯,程序必須保持簡單,否則就會變得很難理解。 因此, 因此,將一個復(fù)雜的程序切分成層。開發(fā)每一個層中內(nèi)聚的設(shè)計,讓每個層僅依賴于它底下的那層。遵照標(biāo)準(zhǔn)的架構(gòu)模式以提供層的低耦合。將領(lǐng)域模型相關(guān)的代碼集中到一個層中,把它從用戶界面、應(yīng)用和基礎(chǔ)設(shè)施代碼中分隔開來。釋放領(lǐng)域?qū)ο蟮娘@示自己、 保存自己、管理應(yīng)用任務(wù)等職責(zé),讓它專注于展現(xiàn)領(lǐng)域模型。這會讓一個模型進一步富含知識,更清晰地捕獲 基礎(chǔ)的業(yè)務(wù)知識,讓它們正常工作。 領(lǐng)域驅(qū)動的經(jīng)典分層主要分為: 4 個層:表現(xiàn)層、應(yīng)用層、領(lǐng)域?qū)印⒒A(chǔ)設(shè)施層。 第 2章 相關(guān) 理論 介紹 7 表 域驅(qū)動設(shè)計的經(jīng)典分層 用戶界面 /展現(xiàn)層 負責(zé)向用戶展現(xiàn)信息以及解釋用戶命令。 應(yīng)用層 很薄的一層,用來協(xié)調(diào)應(yīng)用的活動。它不包含業(yè)務(wù)邏輯。它不保留業(yè)務(wù)對象的狀態(tài),但它保有應(yīng)用任務(wù)的進度狀態(tài)。 領(lǐng)域?qū)?本層包含關(guān)于領(lǐng)域的信息。這是業(yè)務(wù)軟件的核心所在。在這里保留業(yè)務(wù)對象的狀態(tài),對業(yè)務(wù)對象和它們狀態(tài)的持久化被委托給了基礎(chǔ)設(shè)施層。 基礎(chǔ)設(shè)施層 本層作為其他層的支撐庫存在。它提供了層間的通 信,實現(xiàn)對業(yè)務(wù)對象的持久化,包含對用戶界面層的支撐庫等作用。 和值對象 在領(lǐng)域中,可以抽象出擁有標(biāo)識符的對象,標(biāo)示符在經(jīng)歷了各種狀態(tài)之后仍然能夠保持不變,我們把這樣的對象稱為實體 , 所以實體的特性就是擁有 標(biāo)識 符8。 有很多不同的方式來為每一個對象創(chuàng)建一個唯一的標(biāo)識符:可能由一個模型來自動產(chǎn)生 軟件中內(nèi)部使用,不會讓它對用戶可見;它可能是數(shù)據(jù)庫表的一個主鍵,會被保證在數(shù)據(jù)庫中是唯一的。只要對象從數(shù)據(jù)庫中被檢索,它的 會被檢索出并在內(nèi)存中被重建; 可能由用戶創(chuàng)建,例如每個機場 會有一個關(guān)聯(lián)的代碼。每個機場擁有一個唯一的字符串 個字符串是在世界范圍內(nèi)通用的,被世界上的每一個旅行代理使用以標(biāo)識它們的旅行計劃中涉及的機場。另一種解決方案是使用對象的屬性來創(chuàng)建標(biāo)識符,當(dāng)這個屬性不足以代表標(biāo)識符時,另一個屬性就會被加入以幫助確定每一個對象。 實體在領(lǐng)域中是必須的對象,但是將所有的對象視為實體也會帶來隱含的性能問題,因為需要對每個對象產(chǎn)生一個實例。 如果我們對某個對象是什么不感興趣,只關(guān)心它擁有的屬性,用它來描述領(lǐng)域的特殊方面、且沒有標(biāo)識符的一個對象,那么我可以用 值對象 。 以下列舉一個經(jīng) 典的例子充分體現(xiàn)實體和值對象的關(guān)系 ;一個客戶實體一般都包含標(biāo)示符,然而在客戶的屬性中,我們可以抽象出一個值得對象“地址”,地址這個值對象包含街道、城市、國家三個屬性,這個值對象以后就可以被其他實體共享使用。 如圖 圖 對象 同濟大學(xué) 碩士學(xué)位論文 基于 設(shè)計與實現(xiàn) 8 務(wù) 在領(lǐng)域分析和建模的過程中,我們會發(fā)現(xiàn)有些方面的領(lǐng)域是很難映射成對象的。對象要通??紤]的是擁有屬性,對象會管理它的內(nèi)部狀態(tài)并暴露行為。在我們開發(fā)通用語言時,領(lǐng)域中的主要概念被引入到語言中,語言中的名詞很容易被映射成對象。語言中對應(yīng)那些名詞的動詞變成那些對 象的行為。但是有些領(lǐng)域中的動作,它們是一些動詞,看上去卻不屬于任何對象。它們代表了領(lǐng)域中的一個重要的行為,所以不能忽略它們或者簡單的把它們合并到某個實體或者值對象中。給一個對象增加這樣的行為會破壞這個對象,讓它看上去擁有了本該屬于它的功能。但是,要使用一種面向?qū)ο笳Z言,我們必須用到一個對象才行。我們不能只擁有一個單獨的功能,它必須附屬于某個對象 9。通常這種行為類的功能會跨越若干個對象,或許是不同的類。例如,為了從一個賬戶向另一個賬戶轉(zhuǎn)錢,這個功能應(yīng)該放到轉(zhuǎn)出的賬戶還是在接收的賬戶中?感覺放在這兩個中的哪 一個也不對勁。當(dāng)這樣的行為從領(lǐng)域中被識別出來時,最佳實踐是將它聲明成一個服務(wù)。這樣的對象不再擁有內(nèi)置的狀態(tài)了,它的作用是為了簡化所提供的領(lǐng)域功能。服務(wù)所能提供的協(xié)調(diào)作用是非常重要的,一個服務(wù)可以將服務(wù)于實體和值對象的相關(guān)功能進行分組。最好顯式聲明服務(wù),因為它創(chuàng)建了領(lǐng)域中的一個清晰的特性,它封裝了一個概念。把這樣的功能放入實體或者值對象都會導(dǎo)致混亂,因為那些對象的立場將變得不清楚。服務(wù)擔(dān)當(dāng)了一個提供操作的接口。服務(wù)在技術(shù)框架中是通用的,但它們也能被運用到領(lǐng)域?qū)又小R粋€服務(wù)不是在執(zhí)行服務(wù)的對象,而與被執(zhí)行操作的 對象相關(guān)。在這種情況下,一個服務(wù)通常變成了多個對象的一個鏈接點。這也是為什么行為很自然地依附于一個服務(wù)而不是被包含到其他領(lǐng)域?qū)ο蟮囊粋€原因。如果這樣的功能被包含進領(lǐng)域?qū)ο?,就會在領(lǐng)域?qū)ο蠛统蔀椴僮魇芤嬲叩膶ο笾g建立起一個密集的關(guān)聯(lián)網(wǎng)。眾多對象間的高耦合度是糟糕設(shè)計的一個信號,因為這會讓代碼很難閱讀與理解,更重要的是,這會導(dǎo)致很難進行變更。一個服務(wù)應(yīng)該不是對通常屬于領(lǐng)域?qū)ο蟮牟僮鞯奶娲N覀儾粦?yīng)該為每一個需要的操作來建立一個服務(wù)。但是當(dāng)一個操作凸現(xiàn)為一個領(lǐng)域中的重要概念時,就需要為它建立一個服務(wù)了。以下是服 務(wù)的 3 個特征 錯誤 !未找到引用源。 : (一 ) 服務(wù)執(zhí)行的操作涉及一個領(lǐng)域概念,這個領(lǐng)域概念通常不屬于一個實體或者值對象。 (二 ) 被執(zhí)行的操作涉及到領(lǐng)域中的其他的對象。 (三 ) 操作是無狀態(tài)的。 塊 第 2章 相關(guān) 理論 介紹 9 當(dāng)領(lǐng)域模型隨著項目的復(fù)雜度變得越來越大的時候,理解不同部件與部件之間的關(guān)系就變得十分困難?;诖嗽?,很有必要將模型組織進模塊。模塊被用來作為組織相關(guān)概念和任務(wù)以便降低復(fù)雜性的一種方法。模塊在許多項目中被廣泛使用。如果 要 查看模快包含的內(nèi)容以及模塊間的關(guān)系,就會很容易從中掌握大型模型的 概況。理解了模型間的交互之后,人們就可以開始處理模塊中的細節(jié)了。因此劃分模塊 是管理復(fù)雜性的簡單有效的方法。 另一個使用模塊的原因跟代碼質(zhì)量有關(guān); 軟件代碼應(yīng)該具有高層次的內(nèi)聚性和低層次的耦合度。雖然內(nèi)聚開始于類和方法級別,它也可以應(yīng)用于模塊級別。強烈推薦將高關(guān)聯(lián)度的類分組到一個模塊以提供盡可能大的內(nèi)聚 10。有很多類型的內(nèi)聚。最常用到的兩個是通信性內(nèi)聚和功能性內(nèi)聚。通信性內(nèi)聚通常在模塊的部件操作相同的數(shù)據(jù)時使用。把它們分到一組很有意義,因為它們之間存在很強的關(guān)聯(lián)性。功能性內(nèi)聚在模塊中的部件協(xié)同工作以完成定義好 的任務(wù)時使用。這被認(rèn)為是最佳的內(nèi)聚類型。在設(shè)計中使用模塊是一種增進內(nèi)聚和消除耦合的方法。模塊應(yīng)該由在功能上或者邏輯上屬于一體的元素構(gòu)成,以保證內(nèi)聚。模塊應(yīng)該具有定義好的接口,這些接口可以被其他的模塊訪問。最好用訪問一個接口的方式替代調(diào)用模塊中的三個對象,因為這可以降低耦合。低耦合降低了復(fù)雜性并增強了可維護性。當(dāng)要執(zhí)行定義好的功能時,模塊間僅有極少的連接會讓人很容易理解系統(tǒng)是如何工作的,這要比每個模塊同其他的模塊間存在許多關(guān)聯(lián)好很多。 給定的模塊名稱會成為通用語言的組成部分。模塊和它們的名字應(yīng)該能反映對領(lǐng)域的深 層理解。 合 域?qū)ο笤谒鼈兊纳趦?nèi)會歷經(jīng)若干種狀態(tài),直到最后消亡。有時它們會被保存到一個永久的位置,例如數(shù)據(jù)庫中,這樣可以在以后的日子里被檢索到,或者被存檔。有時它們會被完全從系統(tǒng)中清除掉,包括從數(shù)據(jù)庫和歸檔介質(zhì)上。管理領(lǐng)域?qū)ο蟮纳芷谧陨砭蜁龅揭粋€挑戰(zhàn),如果做得不恰當(dāng),就會對領(lǐng)域模型產(chǎn)生一個負面的影響。 聚合是一個用來定義對象所有權(quán)和邊界的領(lǐng)域模式 錯誤 !未找到引用源。 。工廠和資源庫是另外的兩個設(shè)計模式,用來幫助我們處理對象的創(chuàng)建和 存儲問題 。 聚合是針對數(shù)據(jù)變化可以考慮成一個單元的一組相關(guān)的對象。聚合使用邊界將內(nèi)部和外部的對象劃分開來。每個聚合有一個根。這個根是一個實體,并且它是外部可以訪問的唯一的對象。根可以保持對任意聚合對象的引用,并且其他的對象可以持有任意其他的對象,但一個外部對象只能持有根對象的引用。如果邊界內(nèi)有其他的實體,那些實體的標(biāo)識符是本地化的,只在聚合內(nèi)有意義。 同濟大學(xué) 碩士學(xué)位論文 基于 設(shè)計與實現(xiàn) 10 聚合需要 保持?jǐn)?shù)據(jù)一致性 ,其他對象只能持有根對象的引用,這意味著它們不能直接變更聚合內(nèi)的其他的對象。如果根從內(nèi)存中被刪除或者移除,聚合內(nèi)的其他所有的對象也將被刪 除,因為再不會有其他的對象持有它們當(dāng)中的任何一個了。 下面具體用一個實例說明問題: 如圖 圖 合與聚合根 上圖中, 聚合的根,并且其他所有的對象都是內(nèi)部的。如果需要 個它的拷貝將被傳遞到外部對象。 廠 單對象的創(chuàng)建,我們通過一個構(gòu)造函數(shù)就可以解決了。然后在領(lǐng)域環(huán)境中,當(dāng)對象的創(chuàng)建涉及到很多領(lǐng)域知識,包含諸多領(lǐng)域邏輯的時候,例如 關(guān)于對象內(nèi)部結(jié)構(gòu)的,關(guān)于所 含對象之間的關(guān)系的以及應(yīng)用其上的規(guī)則等。這意味著對象的每個客戶程序?qū)⒊钟嘘P(guān)于對象 構(gòu)建的專有知識。這破壞了領(lǐng)域?qū)ο蠛途酆系姆庋b。如果客戶程序?qū)儆趹?yīng)用層,領(lǐng)域?qū)拥囊徊糠謱⒈灰频搅送膺叄瑪_亂整個設(shè)計一個對象的創(chuàng)建可能是它自身的主要操作,但是復(fù)雜的組裝操作不該成為被創(chuàng)建對象的職責(zé)。組合這樣的職責(zé)會產(chǎn)生笨拙的設(shè)計,也很難讓人理解。 因此,有必要引入一個新的概念,這個概念可以幫助封裝復(fù)雜的對象創(chuàng)建過程,它就是工廠( 工廠用來封裝對象創(chuàng)建所必需的知識,它們對創(chuàng)建第 2章 相關(guān) 理論 介紹 11 聚合特別有用 11。當(dāng)聚合的根建立時,所有聚合包含的對象將隨之建立,所有的不變量得到了強化。 對應(yīng) 計模式中,我們有工廠 方法和抽象工廠模式。 源庫 模型驅(qū)動設(shè)計中,對象從被創(chuàng)建開始,直到被刪除或者被歸檔結(jié)束,是有一個生命周期的。一個構(gòu)造函數(shù)或者工廠
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年敏捷開發(fā)迭代計劃合同協(xié)議
- 企業(yè)招投標(biāo)規(guī)范制度
- 小學(xué)高年級學(xué)生情緒、言語工作記憶容量與閱讀理解的關(guān)聯(lián)探究
- 樣本來源與去向核查流程
- 小學(xué)生同伴地位與沖突行為的社會信息加工關(guān)聯(lián)研究
- 小學(xué)學(xué)業(yè)不良兒童自我概念與同伴接納的關(guān)聯(lián)探究:影響與干預(yù)
- 2026年五軸聯(lián)動機床項目可行性研究報告
- 2026年健康數(shù)據(jù)分析與個人數(shù)字健康畫像項目可行性研究報告
- 2026年智能健身車阻力系統(tǒng)項目公司成立分析報告
- 2026年鋁電池儲能項目評估報告
- 執(zhí)業(yè)藥師考勤管理制度表
- 供應(yīng)鏈中臺體系構(gòu)建與應(yīng)用
- 宿舍家具拆除方案(3篇)
- 設(shè)備變更方案(3篇)
- 食堂菜價定價管理辦法
- 16.迷你中線導(dǎo)管帶教計劃
- 大學(xué)軍事理論考試題及答案
- 2025社交禮儀資料:15《現(xiàn)代社交禮儀》教案
- 菏澤風(fēng)電項目可行性研究報告
- T/CCMA 0114-2021履帶式升降工作平臺
- DB32T 5124.1-2025 臨床護理技術(shù)規(guī)范 第1部分:成人危重癥患者目標(biāo)溫度管理
評論
0/150
提交評論