UML系統分析與設計04-架構設計之“分層”

來源:互聯網
上載者:User

  我不是一個架構師,寫下這些內容也僅作為個人的一點總結,以作拋磚引玉之用。

 

  平常在談論系統架構時,我們常常會聽到類似“三層架構”、“多層架構”的說活,但是在嚴格的UML設計卻並沒有直接的對於“層”的形象描述;在典型的基於“4+1視圖”的架構設計文檔中也同樣沒有明確要求對“層”的形象分析。

  [注意:喜歡“層”的朋友,在4+1視圖時可在邏輯視圖中單獨添加對“層”的詳細說明]

  在基於UML設計時,我們往往會把“分層”的理念分解成“組件”和“包”的形式來展現,但作為一名.net開發人員來說,對於“層”的喜愛卻是由來已久,且其直觀的表觀方式也是無法替代的,就我個人而言非常喜歡使用。以往,我常用PPT來繪製這部分的內容,自從VS2010後,就可以統一到一處了。

 

一、PetShop分層架構圖

  如果您是一個從業多年的.net程式員,那麼對PetShop的曆史應該是稍有瞭解的,自PetShop2.0開始,每升級一次都會伴隨著一個典型“分層架構圖”,我就是從那個時候起開始喜歡上“分層架構圖”的。

  PetShop 2.0分層架構圖

   

 

  PetShop 3.0分層架構圖

   

 

  PetShop 4.0分層架構圖

   

 

 

二、NLayer分層架構圖

  NLayer作為微軟公布的又一個典型的.net技術解決方案,在分層架構上讓人耳目一新,當然看原始碼(解決方案)來理解分層架構可能會比這個給出的架構圖更明了,或者說本可以提供一個更詳細“分層架構圖”。

  也許是NLayer給出的分層架構圖,其主要目的是為了展示.net強大的技術體系(正如說明中的“Mapping Technologies”)而非介紹架構思想。但無論如何我們不得不說NLayer在分層上做的還是相當不錯,有較強的代表性。

  對NLayer項目感興趣的朋友可以從http://microsoftnlayerapp.codeplex.com/ 瞭解更多詳情。

  以下是這個項目的“多層架構圖”:

   

 

三、另一種風格的基於分層架構圖

  曾經在CSDN論壇上看到有人提了個分層架構的問題,其中就引用了如下的一個分層架構圖,後經查實其實出自於:http://www.cnblogs.com/ssol/archive/2011/09/14/2175320.html,據我個人分析,這也不愧為一個典型的分層架構圖。

   

  

四、Visual Studio對分層的支援

  雖說“分層”的做法由來已久,但真正在IDE中得以很好的支援,卻是始於VS2010。在VS2010架構師版中不僅提供了對UML的支援(並非完全),同時也加入了自己 “分層”的理念。同時對於一些典型的架構模式,也提供了基於Visual Studio的外掛程式,以方便設計人員能快速、簡單的繪製分層架構圖。基於VS2010和VS2012外掛程式可以分別通過以下兩個地址進行下載並安裝。

  For VS2010:http://visualstudiogallery.msdn.microsoft.com/9c8051f8-e8f7-45b1-8d04-dad6afc697d2

  For VS2012:http://visualstudiogallery.msdn.microsoft.com/94ca6b70-539c-4f49-98c9-0550a4c044bf

 

  以下是安裝外掛程式後,分別從VS2010和2012RC上的。

  1、  VS2010架構模板

   

  

  2、  VS2010 Mobile Application

   

 

  3、  VS2010 Rich Client Application

   

 

  4、  VS2010 Rich Internet Application

   

 

  5、  VS2010 Services Application

   

 

  6、  VS2010 Web Application

   

 

  7、  VS2012RC 架構模板

   

 

  8、  VS2012RC Common Application Pattern

   

 

  9、  VS2012RC Service Archetype Pattern

   

  

  上述那些分層架構模板都是基於“最佳實務”的總結,具有很強的代表性。對於一些中小系統都可以直接拿過來用,或稍加修改即可。當然要完全明白各層的含義和作用,建議有興趣的朋友可以參閱一下《Microsoft Application Architecture Guide, 2nd Edition》

   

http://msdn.microsoft.com/en-us/library/dd673617.aspx,http://apparchguide.codeplex.com/

         

五、DIY一個Music Store的分層架構圖

  由於我們一直採用的CodePlxe中MusicStore其初衷主要用於說明和演練Asp.net mvc技術,所以為了更好的說明架構和分層,我們人為地對其需求進行一定的擴充。

  1、  MusicStore是一個基於B/S和C/S混合模式的系統。

  2、  MusicStore是一個分布式系統,以支援加盟方式。且各加盟店內部使用C/S方式進行資料管理,以提供更好的使用者體驗。(當然B/S且有同樣的功能)

  3、  MusicStore項目需要支援手持功能對唱片進行終端資料管理(如:定期對唱片進行檢查,以確認丟失或損壞),核實資訊是以無線方式與PC進行互動。

  4、  可以通過GIS資訊尋找附件的唱片店。

  5、  可以列印使用者自訂的報表或圖表。

  (汗!假設的是不是有點過了?)

 

   接下來我們就簡單地來為這些需求設計一個分層架構圖:

  1、分層架構圖

   

 

  2、簡要說明

  Business Layer 為基於C/S和B/S模式應用提供統一的分布式應用服務,其中WinForm Presentation Layer 和WEB Presentation Layer都將採用WCF技術與Business Layer通訊。

  富用戶端方面,採用WinForm方式進行UI設計,同時引進第三方DeVExpress控制項陳列庫進行美化;為了能較好的實現單元測試,採用MVP模式進行實現。

  WEB方面,前台採用ExtJS指令碼庫,並採用ASP .NET MVC 3作為實現主架構。

  商務邏輯層主要基於領網域服務來實現,並通過統一的封裝為各用戶端提供應用服務。本系統中採用DDD方式設計,DomainEntity作為各層間主要對象傳輸。

  倉儲層主要採用MS SqlServer來為較大的連鎖店供資料服務,當然也可以採用基於MS Access來為單個店面提供資料服務。倉儲層採用Adapter設計模式以支援不同資料庫系統,並接合IOC來進行動態配置。同時,對於基於SqlServer資料庫系統的實現採用Asp.net Entity Framework技術實現;對基於Access資料庫系統的採用ADO .NET技術實現。

  其中公用部分:通訊服務、GIS服務和Report服務為獨立子系統,其具體實現可以獨立分層和設計,此處不做詳述。Security為系統提供安全;MSEL為微軟體企業庫,可以提供IOC架構、緩衝機制、基於ADO .NET的資料庫訪問操作、異常處理、UI驗證等;NLog為本系統的提供日誌管理架構。

 

六、分層架構圖的主要作用

  不管一個系統有多麼複雜,如果最後形成了循環參考,那麼基本上可以斷定是因為在設計時分層沒有做好。分層架構的好處不作多說,我們只說說“分層架構圖”的主要作用。

  1、雖說UML定義為整合模組化語言,但在其實操作和講解上,其理論與技術實現還是需要一定的語言基礎。相對UML來說,“分層架構圖”就顯得更加隨和一些,對於一些特定客戶,“分層架構圖”在闡述技術方向、系統運作、應對變化等方面卻有獨到之處。

  2、“分層架構圖”簡潔明了的表現形式不僅能給非技術人員一目瞭然的感覺。對於技術人員也有一種高屋建瓴,撥雲見日的感覺,使得開發人員能立即明白架構師的主要意圖和思想。

  3、“分層架構圖”首先能直觀的描述系統的主要子系統、主要組件及其關係,為後繼UML中“元件圖表和包圖”的劃分提供指導。

  4、在形成“分層架構圖”時,架構師往往還需要分析出要使用哪些公用組件模組,有些模組可能現在不存在,但在本項目實施後可形成。有些可能已經有的存在,可直接使用。公用組件的積累也往往會伴隨一個公司軟體開發的成長,好的組件設計和成果也是公司的一項重要財富。

 

七、分層架構圖的大同小異

  曾經在參加一個評審時,有人問到:“你的這個分層架構圖怎麼和微軟體提供的模板看上去大同小異?” 其實確實如此!在我們的身邊並不是所有的項目都是大項目、都是戰略性的,在架構設計上要有獨到之處,以解決複雜的需求和效能要求。而大部分的項目則是一些中小型的應用系統、甚至還有一些是用於“科研”的小程式,對於這部分項目我們完全可以借用比較常見的分層架構模板來完成,以節約設計時間。由於這些模板是基於實踐的總結,其總體思想、思路、解決方案都比較成熟,也就是從宏觀上來說就是“三層到多層”的通用解決方案,即大同!而小異則是基於項目本身的特點於細節處的區別,做到具體問題具體分析。比如我們可以採用WebForm的方式也可以採用ASP .NET MVC的方式作為表現層的實現方式;可以採用SqlServer 2005,也可以採用Oracol 10g作為資料庫系統;同樣的我們可以跟據項目的部署情況決定採用“貧血模式”或“充血模式”,這就不能一概而論了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.