posts - 176, comments - 240, trackbacks - 0, articles - 7

          架構的可退化性與無侵入性

          Posted on 2005-12-22 22:55 canonical 閱讀(1209) 評論(4)  編輯  收藏 所屬分類: 設計理論
              架構的可退化性(degragation)指的是架構的結構可以從元素比較豐富,層次比較多,比較復雜的情況退化到比較簡單的情況, 而架構的無侵入性(non-invasive)指的是架構對于外部接入對象沒有特殊的形式要求, 一般通過依賴注入(dependency injection)向接入的外部對象推送信息. 這兩個概念之間存在著緊密的關聯, 但并不等同. 無侵入性可以看作是架構的一種局部可退化性, 例如一個業務對象在正常工作的時候需要是完整的EJB對象形態, 而在編寫的時候退化到普通的java對象(POJO). 架構的可退化性是一個比無侵入性更加廣泛的概念:一個架構對外可以是無侵入性的, 但是它的實現本身可能相當復雜, 是不能退化的. 例如在一般的web表現層設計中, 很多人都試圖提供一個RPC層, 將Web請求解析后映射為對java對象方法的調用. 通過一系列的描述文件, java對象本身可以完全不知道web層的存在, 因而這種設計在某種程度上可以看作是無侵入性的. 但是假如現在出現了性能問題,或者RPC層本身出現一些bug, 或者我們需要一些RPC層很難有效實現的映射規則, web層設計應該允許我們越過RPC層, 很方便的直接處理request和response, 這意味著在我們的架構設計中需要把邊界劃在web接口上(需要在這里定義基本的交互規范),而不僅僅是對象接口上.如果一個架構設計強制規定了一個不可越 過的RPC層, 則意味著該架構在這一點上是不可退化的.

              架構的可退化性是級列設計理論的一個自然推論, 它是對架構整體的要求, 需要同時考慮到架構本身實現的復雜性以及與外部接口的復雜性, 而不是僅僅考慮到對外部接入對象的復雜性的要求. 整個架構需要能夠沿著復雜性級列scale down, 而不僅僅是scale up!

          Feedback

          # re: 架構的可退化性與無侵入性  回復  更多評論   

          2005-12-23 01:21 by ajooo
          說的太對了!

          # re: 架構的可退化性與無侵入性  回復  更多評論   

          2005-12-23 16:40 by weide
          首先感謝canonical對我在上個Blog中提出的問題進行了解說

          這次兩段的文字雖然不長,又讓我考慮了老半天,感覺仍有推敲之處:
          架構的無侵入性,指的是架構對于外部接入對象沒有特殊的形式要求,這種無侵入性在事實上“降低”了外部對象與框架本身的依賴關系--是“降低”,而不是沒有了。所以從這個角度講,所謂“無侵入性”是根本就不存在的,只能降低“侵入性”,即術語應該是:“低侵入性”。剛剛搜到一篇文檔也是說這個問題:
          http://www.dingl.com/view.shtml?xh=474

          再來看可退化性和低侵入性的關系:
          低侵入性,指出了框架在進行擴展時的復雜度降低,對框架的依賴降低,通常就是我們希望的靈活的擴展能力
          可退化性,則描述了,可以把增加的這些擴展,很方便的unload
          這樣,低侵入性造就了可退化性。

          關于Blog中舉出的RPC層,這個很讓我困惑:因為它看上去,真的是“無侵入性”的。不過后來想想,這個RPC層實際上還是有所依賴的:它必須處理request和response?

          # re: 架構的可退化性與無侵入性  回復  更多評論   

          2005-12-24 00:39 by wfeng007
          對于“可退化性“ 不太了解
          請問 根據你的定義
          “架構的可退化性(degragation)指的是架構的結構可以從元素比較豐富,層次比較多,比較復雜的情況退化到比較簡單的情況“

          是不是 退化就是指 不同職責部分 的合并但是這些職責依然存在?

          # re: 架構的可退化性與無侵入性  回復  更多評論   

          2005-12-24 12:43 by 非魚
          @canonical
          我認為你說的無侵入和可退化,適用于平臺、框架甚至架構的水平部分或者設計約束。對于一個軟件的架構來說,往往由于其需求的變化,屬于你所說的態空間不完備的問題(只要一個存在就夠了)。而且對于這種情況,我們已經有了不利己的解決方案(或者說理論?)——迭代。

          你說的級列理論,是一個從一般到特殊思想的應用,前提是一個完備的態空間,即“最一般”情況。這在軟件設計中很難適用,我們只能應用其思想。考慮以下的例子:

          一個應用是一個網絡應用;它可以使用現有任何網絡協議通信。
          最簡單的狀態,單機可以使用它;
          兩臺機器可以使用它;
          可以使用IPX;TCP/IP等等協議通信;也可以使用IPV6(IPNG);
          現在軟件完成了,一個新的網絡協議出現了(比如IPNNG。。)。

          所以,級列理論,你應該在考慮一下,確定其適應環境,在前面加上定語。
          主站蜘蛛池模板: 齐齐哈尔市| 三台县| 江北区| 和林格尔县| 南汇区| 临江市| 永修县| 益阳市| 融水| 樟树市| 黄梅县| 永川市| 新乡市| 韶山市| 雷州市| 年辖:市辖区| 汉源县| 庆云县| 鄂托克旗| 荃湾区| 广灵县| 兴和县| 井陉县| 乐至县| 金华市| 洛隆县| 阿拉善左旗| 和田市| 驻马店市| 西丰县| 昌黎县| 翁牛特旗| 醴陵市| 阿勒泰市| 永顺县| 横峰县| 吉林市| 伊宁市| 海口市| 曲水县| 鄂托克旗|