日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

领域驱动设计,让程序员心中有码(三)

發(fā)布時間:2023/12/4 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 领域驱动设计,让程序员心中有码(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  正如西方古典哲學(xué)在現(xiàn)代社會逐漸式微,成為少數(shù)內(nèi)心豐滿者們填充自己精神世界的寶貴食物,UML也這樣;互聯(lián)網(wǎng)技術(shù)飛速發(fā)展的今天,各類軟件設(shè)計思想層出不窮,正是站在UML和其他各種軟件基礎(chǔ)理論巨人的肩膀上,成就了當(dāng)代軟件產(chǎn)業(yè)的輝煌。

  如果說軟件工程是在虛擬的世界描繪出人類對于這世界一切大千萬物的美好想象,那么也許UML思想應(yīng)該是這虛擬世界的古老哲學(xué)。他就像盧梭在法國大革命前,描述在《社會契約論》一書中,對這自由世界的期待。書中,敘述了社會結(jié)構(gòu)和社會契約、主權(quán)和權(quán)利,和運作模式。這本書,奠定了世界民族制度的基石,深刻的影響了世界的發(fā)展史。?  

  ?正如西方古典哲學(xué)在現(xiàn)代社會逐漸式微,成為少數(shù)內(nèi)心豐滿者們填充自己精神世界的寶貴食物,UML也這樣;互聯(lián)網(wǎng)技術(shù)飛速發(fā)展的今天,各類軟件設(shè)計思想層出不窮,正是站在UML和其他各種軟件基礎(chǔ)理論巨人的肩膀上,成就了當(dāng)代軟件產(chǎn)業(yè)的輝煌。但是也必須承認(rèn)到,UML就像成為案牘上的新華字典,它也許曾經(jīng)璀璨奪目,而今卻積滿灰塵。尤其是目前的軟件思想,更多的是側(cè)重于更快更好的完成項目,重開發(fā),輕設(shè)計實際上是普遍現(xiàn)象。事實上,UML一開始,也是計算機專業(yè)課程中一顆難以采摘的艱澀果實,在追求互聯(lián)網(wǎng)速度的今天,被大家選擇性的遺忘也是情理之中,但UML是一種非常寶貴的財富,了解UML,并適當(dāng)?shù)氖褂?#xff0c;將讓我們真正理解軟件設(shè)計的真諦。

?

?

01

領(lǐng)域驅(qū)動建模與模型驅(qū)動設(shè)計

?

? ? ? ? 上一篇提到,領(lǐng)域驅(qū)動設(shè)計的核心是建模。而采用的建模方法就是UML建模。在我們的軟件設(shè)計過程中,有兩種截然相反的設(shè)計理念。一種理念是,一切皆抽象,把整個系統(tǒng)設(shè)計成一張無比巨大的類圖,這個類圖簡直包羅萬象,與當(dāng)前項目有關(guān)的所有方面都一一呈現(xiàn)。另外一種是沒有設(shè)計,沒有對象建模,先搭一個快速原型,然后不斷的累積功能,沒有設(shè)計模式中需要用到的泛化或抽象的思想。

? ? ? ?領(lǐng)域驅(qū)動設(shè)計認(rèn)為,不合時宜的設(shè)計或者沒有設(shè)計,對于復(fù)雜項目來說,根本就是舉步維艱。而且,如果某些復(fù)雜項目確實嘗試使用某些形式的領(lǐng)域模型,但是沒有把模型與代碼的編寫緊密的聯(lián)系起來,這樣的模型也無法確保軟件的正確性。在實際項目中,領(lǐng)域模型的建立也是分析知識,消化吸收的過程,如果分析與設(shè)計存在分歧,那么在分析和設(shè)計活動中所獲得的知識將毫無價值。

? ? ?領(lǐng)域驅(qū)動設(shè)計使用模型驅(qū)動設(shè)計的方法來解決這些問題。它期望通過不再將分析模型和程序設(shè)計分離開,尋求一種能夠兼顧兩方面需求的單一模型。軟件系統(tǒng)的每個部分,都在模型中體現(xiàn)。即使更加深層次的領(lǐng)域概念,也應(yīng)該如此。模型不應(yīng)該只滿足設(shè)計需求,也要滿足開發(fā)需求,更需要支持健壯性的通用語言。

? ? ?領(lǐng)域驅(qū)動設(shè)計中采用模型驅(qū)動設(shè)計的模式,期待達(dá)到的目標(biāo)是,通過模型獲取用于程序設(shè)計和基本職責(zé)分配的術(shù)語,讓程序代碼成為模型的表達(dá)。同時,也對后期的其他活動造成影響。不同的子系統(tǒng)往往要建立不同的模型,而從需求分析到代碼過程中,不應(yīng)該額外設(shè)計過多的模型,這意味著,模型是單獨為某一塊業(yè)務(wù)設(shè)計的。

?

02

UML,為設(shè)計而生

?

????????為了設(shè)計每個子系統(tǒng)的單獨模型,需要對業(yè)務(wù)進行仔細(xì)咀嚼,消化好知識,研究模型的每個選項,并細(xì)化為使用的軟件元素,通過UML讓軟件設(shè)計本身成為一個高效運轉(zhuǎn),不斷迭代的模式。

? ? ? ??統(tǒng)一建模語言(UML,UnifiedModelingLanguage)是面向?qū)ο筌浖臉?biāo)準(zhǔn)化建模語言。UML因其簡單、統(tǒng)一的特點,而且能表達(dá)軟件設(shè)計中的動態(tài)和靜態(tài)信息,目前已成為可視化建模語言的工業(yè)標(biāo)準(zhǔn)。UML的目標(biāo)是以面向?qū)ο髨D的方式來描述任何類型的系統(tǒng),具有很廣泛的應(yīng)用領(lǐng)域。其中最常用的是建立軟件系統(tǒng)的模型,但它同樣可以用于描述非軟件領(lǐng)域的系統(tǒng),如機械系統(tǒng)、企業(yè)機構(gòu)或業(yè)務(wù)過程,以及處理復(fù)雜數(shù)據(jù)的信息系統(tǒng)的執(zhí)行過程等。?

? ? ? 前文提到過,UML如同《社會契約論》這本書一般,對軟件工程學(xué)進行了定義,它主要是通過一系列模型和關(guān)聯(lián)關(guān)系來進行約定的。可以說,UML是軟件工程學(xué)中最基本的范式,這種范式最終影響了我們所設(shè)計的軟件產(chǎn)品的方方面面。?

? ? ? UML系統(tǒng)設(shè)計過程中,常見的圖表主要由三種不同應(yīng)用視角的模型。

? ? ? 1、首先是分別是功能模型,這種模型聚焦于以用戶角度展示系統(tǒng)的功能,例如用例圖。用例圖定義一個軟件系統(tǒng)中的基本角色類型。用例圖也是一種靜態(tài)的圖表,更側(cè)重于抽象化系統(tǒng)參與者本身,而不是行為特征,如同社會契約中的不同社會角色。

? ? ? 2、其次是對象模型,采用對象、屬性、操作、關(guān)聯(lián)等概念展示系統(tǒng)的結(jié)構(gòu)和基礎(chǔ),包括類圖、對象圖、包圖。類圖,側(cè)重于對對象的狀態(tài)和行為特征進行定義,更加注重于具體的執(zhí)行層面。其實類圖也是軟件系統(tǒng)中最常見的圖表,通過類圖,可以便于讓開發(fā)者了解不同領(lǐng)域之間的關(guān)系。對象圖與類圖本質(zhì)上的作用類似,均代表一種特征明確的單元對象或者實體,不過與類圖相比,對象圖實際上是偏業(yè)務(wù)層面,而類圖偏代碼層面。對象圖和類圖都是邊界清晰的對象,通過狀態(tài),行為,標(biāo)識進行區(qū)分。對象圖是一個空間或時間維度對象在軟件世界的投影,而類圖是抽象對象的具體實現(xiàn)結(jié)構(gòu)。包圖也是模型對象的組合,通過包圖可以將不同類型的對象按照一定的特征進行結(jié)構(gòu)化和更加合理的邏輯定義。

? ???3、再次是動態(tài)模型,主要顯示系統(tǒng)的內(nèi)部行為。包括時序圖,活動圖、狀態(tài)圖。時序圖顯示時間維度上不同對象的執(zhí)行步驟和接口方式,每一個消息代表一個類的操作,或者其他對象的行為觸發(fā)。活動圖,表示對象間正在進行的事件狀態(tài),體現(xiàn)的是對象間在不同階段的狀態(tài)切換,活動圖側(cè)重于對象內(nèi)部,或?qū)ο箝g動態(tài)的執(zhí)行過程中,狀態(tài)變化。看起來活動圖與流程圖類似,但流程圖側(cè)重于表現(xiàn)對象間的順序和時間關(guān)系。活動圖也似乎與狀態(tài)圖類似,不過區(qū)別在于狀態(tài)圖表示單一對象的在不同階段的狀態(tài)變化。? ?????

? ? ? ? 對象間的聯(lián)系,類似于現(xiàn)實社會中實體對象的權(quán)利和義務(wù)以及倫理觀念。在UML中,關(guān)系很多,而且在不同的版本,或不同的設(shè)計軟件中,都有不同形式的關(guān)系表現(xiàn)。而常見的關(guān)系有泛化,實現(xiàn),關(guān)聯(lián),組合,聚合,依賴等。

? ?? ??【泛化】,作為一種繼承關(guān)系,定義父類的特征和行為,并對子類如何表現(xiàn)這種特征和行為進行了約束。例如現(xiàn)代語言中的子類和超類之間,就是一種泛化關(guān)系。

? ? ? ? 【實現(xiàn)】,類與接口之間的關(guān)系。接口作為契約,而類作為具體執(zhí)行者,去執(zhí)行相應(yīng)的契約。

? ? ? ? 【關(guān)聯(lián)】,建立不同類之間的聯(lián)系,這種聯(lián)系包括單向或雙向的聯(lián)系,例如情人之間,互相可以共享對方擁有的資源,而類與類之間建立了聯(lián)系之后,也可以實現(xiàn)對方的某些屬性或行為。

? ? ? ? 【聚合】,表征一個對象和它的子對象間的關(guān)系,子對象在其業(yè)務(wù)范圍擁有一定的獨立權(quán),但是在更大的層面,可能需要父對象類體現(xiàn)。

? ? ? ? 【組合】,組合關(guān)系同樣是表示對象與對象間存在整體與部分間的關(guān)系,但子類無法脫離父類而存在。

? ? ? ? ?【依賴】,體現(xiàn)一個對象的實現(xiàn)需要另外一個類的協(xié)助,缺少依賴性,將導(dǎo)致對象無法運轉(zhuǎn)。依賴又分成直接依賴,間接依賴,循環(huán)依賴,雙向依賴等說法,過于復(fù)雜的依賴關(guān)系將提高系統(tǒng)的耦合性。?

????

03

結(jié)語

?? ? ? ?如我本文開頭所說,UML其實是一種古老哲學(xué),它定義了軟件設(shè)計過程的基本結(jié)構(gòu)、關(guān)系、和職責(zé),對軟件工業(yè)的標(biāo)準(zhǔn)化發(fā)揮了不可磨滅的共享。因此在實踐領(lǐng)域驅(qū)動設(shè)計過程中,同樣也應(yīng)該使用UML這種優(yōu)秀的建模理論作為輔助,設(shè)計和實現(xiàn)符合業(yè)務(wù)需求、開發(fā)模式的軟件系統(tǒng)。

? ? ?十多年前,我就讀于湘中小城,當(dāng)時的專業(yè)是信息與計算科學(xué),實際上這是數(shù)學(xué)系下的一個交叉學(xué)科,我們班大部分同學(xué)都是調(diào)劑生,而我卻是為數(shù)不多的第一志愿錄取。在我們專業(yè)開設(shè)的一堆數(shù)字加計算機課程中,最感興趣的是軟件工程,最記憶猶新的也是uml,然而參加工作以后發(fā)現(xiàn),其實應(yīng)用得非常少,真的是因為它不實用嗎?其實一方面是因為軟件公司的成熟度還不夠,一方面也是盲目的選擇不適合的模式,并不一定能帶來效率的提高,彼之蜜糖,吾之砒霜。應(yīng)當(dāng)根據(jù)企業(yè)實際出發(fā),建立更加利于執(zhí)行的范式,形成一套屬于企業(yè)自己的、簡約、易于執(zhí)行、便于擴展的約束。UML這種思想其實已經(jīng)滲透到我們工作中的方方面面,在領(lǐng)域設(shè)計過程中,尤其需要使用它來打造更美的設(shè)計。

相關(guān)文章:

  • 領(lǐng)域驅(qū)動設(shè)計,讓程序員心中有碼

  • 領(lǐng)域驅(qū)動設(shè)計,讓程序員心中有碼(二)

原文地址: https://www.cnblogs.com/xiyuanMore/p/10129529.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的领域驱动设计,让程序员心中有码(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。