建築學的設計原則也應當成為軟體系統設計的指導原則。
第一種情況
這也就是最為熟知的情況。用戶端向第N層發出請求,而第N層不能獨立完成請求,需要調用第N-1層所提供的服務,第N-1層同樣需要他的下級,也就是N-2層所提供的服務。如此往複,直到第2層和第1層。
第1層可以獨立完成自己的任務,它將執行的結果返還給第2層。第2層得到第1層的結果之後,便能夠繼續完成自己的任務了,它會把執行的結果繼續向上,也就是第3層傳遞。如此反覆,一直到第N-1層和第N層。
圖12、在有N個層次的架構中,請求(Request)沿著層次自上向下傳遞,結果(Result)自下向上傳遞。 |
系統的用戶端只知道第N層,它向第N層發出請求,並且從第N層接到結果,用戶端並不知道其他層次的存在。參見。
第二種情況
這第二種情況代表了自下至上的通訊,稱為通知(Notification)。這一系列的行為開始於第1層,這一層通過處理後,將通知向上傳給第2層,繼續向上傳遞到第3層,一直到第N-1層和第N層為止。參見。
圖14、在有N個層次的架構中,Notification沿著層次自下向上傳遞。 |
使用過USB裝置的讀者知道,一旦把USB裝置插入到電腦中的時候,USB驅動軟體立刻就會發現裝置被啟用,並通知裝置的裝置操作軟體,裝置操作軟體便會啟動。這一系列的行為就是Notification自下向上傳遞的過程。
在第一種情況中,請求首先向下傳遞,然後結果逆向傳遞,形成一個環形。在第二種情況中,Notification的傳遞是單向的。
第三種情況
這一種情況與第一種情況相似,只是僅涉及到一部分的層次而已。
首先用戶端向第N層發出請求,而第N層不能獨立完成請求,需要調用第N-1層所提供的服務,第N-1層同樣需要他的下級,也就是N-2層所提供的服務。如此往複,直到第J層為止。
第J層可以獨立完成自己的任務,而不再需要J-1層。它將執行的結果返還給第J+1層。第J+1層得到第J層的結果之後,便能夠繼續完成自己的任務了,它會把執行的結果繼續向上,也就是第J+2層傳遞。如此反覆,一直到第N-1層和第N層。參見。
圖15、在有N個層次的架構中,Request向上傳遞到某個中介層次就停止了,Result從那裡向下傳遞。 |
同樣,用戶端只知道第N層,而不知道其他層次的存在。
第四種情況
這種情況描述的是Notification自下向上傳遞的過程,只是第二種情況涉及到全部的N各層次,而這裡僅涉及到一部分的層次而已。參見。
圖16、Notification自第1層向上傳遞到某個中介層次就停止了,通訊過程是單向的。 |
首先,全部的行為開始於第1層,這一層通過處理後,將通知向上傳給第2層,繼續向上傳遞到第3層,一直到第J層為止,不會再向上傳遞。
第五種情況
此種情況涉及到兩個階層,兩個結構之間相互連訊,常常稱作協議階層(Protocol Stacks)。在下面的圖中,左邊的第N層發出請求,這個請求向下傳遞,經過N-1層,…第2層直到第1層。
這個時候,請求被接著傳遞給右邊的第1層,然後沿著階層向上傳遞,經過第2層,第3層等等,一直到第N-1層和第N層。
圖17、請求從左邊的第N層向下傳遞到第1層,然後傳遞到右邊。 |
執行的結果自右邊的第N層開始向相反傳遞,經過右邊的第N-1層,N-2層,…第2層、第1層,然後返回到左邊的第1層,再沿著左邊的階層向上傳遞,經過第2層,第3層,…到達第N-1層,回到第N層。
圖18、結果從右邊的第N層向下傳遞到第1層,然後傳遞到左邊。 |
兩端的用戶端A和B都只知道各自的第N層,而不知道其他層次,它們會認為在兩個層次之間存在一個連接,其實這個連接是虛擬,是通過其他層次進行的。
圖19、用戶端A發出請求給左邊的第N層,經過中間的過程之後,到達右邊的第N層,然後傳遞到右邊的客戶。 |
TCP/IP的階層
TCP/IP的設計顯然是依循層次原則設計的,參見。
無循環相依性原則(ADP)
在層次的相互依賴關係中,不允許出現循環相依性關係。比如下面的圖中顯示了從第N層到第N-1層的依賴,從第N-1層到第J層的依賴,從第J層到第2層的依賴,從第2層到第1層的依賴;這都是沒有問題的。但是圖中還有一個從第J層到第N層的依賴關係。這就造成了一個迴圈的依賴關係,而這種循環相依性關係時應當避免的。
假象每一層都由一個木板代表,木板一層壓著一層擺放。上層的木板就會依賴於下層的木板,這就是依賴關係。這樣的依賴關係是不可能迴圈的,因為歐幾裡德幾何學不會允許。如果硬要設計出循環相依性關係的話,就只好偽造幾何學,參見。
圖22、不可能的幾何:在三維歐幾裡德空間中無法實現這樣的幾何結構 |