向banq老師請教一組架構問題

bloodrate發表於2009-07-22
這些問題之前和別人討論過,但是一直沒有結論,考慮banq是jdon架構設計者,固前來討論
1、banq在設計架構的時候用什麼建模工具?我一直用Rose,後來發現其實Rose不是一個好的架構設計工具,而是一個應用系統設計工具,因為Rose不支援UML2.0,一些複雜的類關係表述不清,事實上多數架構都存在這些複雜的關係,IBM對Rose的定位是:IBM開發人員開發IBM產品的時候從來不用Rose,而Rose是針對購買IBM產品的其他開發商使用IBM產品進行二次開發應用的隨產品附贈應用建模工具,可見Rose在架構設計上是疲軟的。
2、也是我主要的問題:UML與架構的關係
都說UML相當於設計圖紙,只要圖紙有了,照著實現就能做出成品,UML是架構設計的精髓,可是太多的架構設計技巧在UML上面展現不出來,所以這其中就具有一個權衡視覺化建模和實際架構程式碼粒度的問題。
banq在jdon下載包中的doc資料夾下贈送了jdon相關時序圖,可是jdon這麼些類,這幾張圖就是九牛一毛,在tomcat6的原始碼中也是隻有幾張簡單的圖,佔tomcat數以百計類中的很小一部分,另外在下載的其他apache開源專案程式碼中鮮有贈送設計圖紙,就算有也是簡單的幾個類。
我說這個的主要意思是一個架構是一個比較精細的東西,比開發應用精密的多,可能為了擴充套件性,實現一些功能要寫一大堆類,每個類都有架構思想和設計模式的體現,這些東西透過指導性的UML很難一應俱全,到底該怎麼權衡這些關係,該不該把每個類,每個例項的生命週期都畫在圖上?
說的有點抽象,舉一個具體的例子:
比如java中的HashMap,在HashMap中定義了靜態內部類Entry,這樣做的好處是
1、根據資料親密性原則,將HashMap中關聯的資料key和value封裝起來
2、這個結構只對HashMap本身有用,所以定義成私有的內部類,以免其他類與Entry產生不必要的耦合
根據兩個原則,這個“靜態內部類Entry”是一個設計非常嚴謹,幾乎找不到更好決定的決定
但是站在設計HashMap當初的角度上考慮,例如banq老師設計這個HashMap作為架構的核心組成部分,banq會不會用UML表現出HashMap與Entry關係以記錄自己的設計決定呢?
一、如果是,就說明在架構設計的UML圖紙裡面畫上HashMap和Entry,這其中設計到的問題包括
(1)UML中很難找到方法表演一個類是另一個類的靜態內部類,更難找到方法體現這兩種類之間的關係,因為一個內部類可以直接呼叫外部類的方法。
(2)如果把這些畫上了,那麼意味著很多其他同等細節的東西也需要在UML上面體現,將會產生一個碩大的難以短時間讀懂的圖紙。
二、如果不是,則產生的主要問題有
(1)HashMap與Entry關係確確實實是你精心設計的結果,是很重要的部分,不是實現架構時候的靈機一動的決定。
(2)你可能確確實實需要在設計而不是開發階段能夠記錄下這個決定,並且很有可能實現架構的人不是設計者你,你也需要保證實現者準確的接收到你的意圖。
所以,這就陷入了兩難的窘境,我也層試圖寫架構,可是發現總是無法掌握UML粒度,並且達不到UML指導的作用。經常是知道UML怎麼畫,但是不知道怎麼用UML記錄下想法,經常畫是一套,做則與圖脫節。

相關文章