1. 程式人生 > >.Net企業級應用架構設計之UML

.Net企業級應用架構設計之UML

這篇部落格之所講UML出現在了《Microsoft.Net企業級應用架構設計》一書的第二章,從架構上講不應該出現這節知識點,但是從架構師的職責角度,UML知識點是一個基礎,因此作者獨立出了一個章節。大家在學生時代都有學習和接觸過UML,那就當作是對於UML的複習了。

若想設計一個系統,無論是任何領域的任何系統,都需要首先對其抽象,抽象就是指建立一個模型,對系統檢視、結構、行為、參與的實體和流程方面提供概念上的描述。模型可以提供給專案干係人,專案干係人也必須要理解模型,從而提供反饋,指出錯誤並給出改進建議。若想讓模型能夠被人理解,則需要以正式的方式,使用已被廣泛接收的標記來給出。因此,我們需要一種建模語言。

在當今建模語言中,最流行的當屬統一建模語言(Unified Modeling Language,UML)。UML是一種通用的圖形化建模語言UML非常適合面向物件系統。還是學生時代學習和使用過,再後來的工作中從我個人而言用到的也比較少。但是建模對於任何軟體專案來說都是核心步驟,對於大型的企業級應用程式老說,其作用更不容忽視。

UML的缺點和優點都來源於其名稱中的“U”,即統一。換句話說,UML正嘗試為所有的人解決所有的問題。因為其宣告的寬泛性,UML幾乎可用於計算機相關的所有領域,但事實上並不是每個領域它都能遊刃有餘。

當前UML主要存在兩個版本,但僅有一個被承認為國際標準。回溯到2005年,ISO將UML的1.4.2版本認可為ISO標準。UML作為一種描述(包括視覺化、具體化、構造說明和編寫文件等)軟體密集型系統的圖形化語言,已經成為了軟體系統設計規劃的標準做法。目前的UML版本已經更新到了2.1.2,不過這個版本目前還沒有成為ISO標準。

這兩個版本之間的區別在於,UML1.x是一種比較簡單的語言,主要用來為類和物件建模。而UML2.x則跳出了限制,不僅能夠描述行為模型,還可以描述架構模型以及業務流程和規則。2.x版本中,UML不再侷限於成為面向物件建模語言,而是把觸角伸到了其他計算機領域,並且2.x中的特性描述提出了將UML應用到特定領域中的首個構想。

插播一段廣告,通過UML的兩個版本讓我聯想到了HTML5前段時間的故事。在 HTML5 標準上合作的標準制定組織 WHATWG 和 W3C 分崩離析了。WHATWG 宣佈正在為 HTML 制定一個活的標準,它將隨著新技術的加入而不斷進化。而W3C則依舊採用傳統的方法制定傳統的標準,需要耗費許多時間。與 W3C 保守遲緩的做法相比,WHATWG能更快的為 HTML5 引入新技術。HTML5的未來變得複雜起來。

這就好比某個國家(和諧)的計算機教科書,我承認基礎的東西是學習的基石,但與時俱進同樣重要。我個人有一個歪理:一個國家的計算機走勢代表了這個國家的整體走勢,程式設計師在社會中的地位代表了這個國家的人權領先程度。我給大家貼兩個網站的連結地址(),兩者之間的天壤之別我想大家都懂的。

廣告時間結束,回到主題。在業界的實際使用中,UML使用方法有3種。分別是草稿模式、藍本模式和程式語言模式。首先介紹草稿模式,草稿模式允許用最簡單的形式來繪出未完成的圖示,這種模式經常被架構師和開發者在進行前向工程和逆向工程時使用。前向工程是標準的工作流程;而逆向工程是指你接受了一個現有系統,想了解其工作原理,在逆向工程中,需要根據現有的系統原始碼得到一個UML模型,最好的結果就是逆向工程得到的UML圖表和前向工程的圖表吻合,若想達到這個目的,就需要考慮雙向工程。接下來藍本模式在前向工程中,團隊用UML寫出藍本,然後根據藍本用指定的語言編寫程式碼。藍本應該儘可能的詳細,儘量避免開發者自行發揮。在逆向工程中,藍本是從原始碼中生成的,以便描寫系統的行為,通常以圖形的方式給出。最後程式語言模式是指對模型描述的越詳細,也就越接近一種新的程式語言,這樣你就擁有一種正式的圖形化語言,也能描述詳細的行為。

不管你是否樂意,UML本身有些偏向於Java語言,或許可以從選擇包而不是名稱空間中猜測出了一些,不過故事還沒結束。在Java中並沒有屬性的概念,而在.Net Framework中,屬性只不過是個"語法糖"而已。你或許知道.Net Framework中的屬性是通過一對getter和setter方法來實現。因此UML建議我們仍使用同樣的方式來定義屬性。此外,UML和Java語言並沒有事件,Java使用一種釋出/訂閱模式的實現來滿足其事件模型,而在.Net Framework中,事件可以看做是一種系統已經內建提供的、同樣模式的實現,並通過C#的event語言關鍵詞來簡化。因此在UML中,並沒有為型別定義事件的專門語法元素。但是.Net型別需要事件,那怎麼辦呢?我們只要簡單地使用EventHandler型別或其他專門的事件委託型別給出即可。

正如生活其他方面一樣,軟體專案中的溝通非常重要,即使沒有正式的詳細說明,溝通也需要標記符號和模型。而UML就是為交流設計中的關鍵想法而存在的一種模型,在合理的時候合理的使用,將會有利於整個軟體專案過程。

相關部落格: