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