2014-01-26 127 views
3

我在哪些情況下應該使用這些模式有點困惑,因爲從某種意義上說,它們看起來與我相似?分層和管道和過濾器

我知道當系統複雜時可以使用Layered,並且可以按照層次結構劃分層次結構,因此每個層次都有不同級別的層次結構函數,並且在較低層次上使用函數,同時公開其功能更高一級。另一方面,Pipe-and-Filter基於獨立的組件處理數據,並且可以通過管道連接,因此它們構成一個完整的執行完整算法的組件。

但是,如果層次結構不存在,那麼所有模塊的順序是否可以改變都會出現問題?

而令我困惑的一個例子是編譯器。這是管道和過濾器體系結構的一個例子,但是如果我沒有錯,某些模塊的順序是相關的。

澄清事情的一些例子會很好,以消除我的困惑。在此先感謝...

回答

7

也許回答已經太遲了,但我仍會嘗試。 這兩種架構風格之間的主要區別是數據流。

一方面,對於管道和過濾器,數據從第一個過濾器推到最後一個過濾器。 而且他們會被推,否則,這個過程不會被視爲成功。例如,在汽車製造工廠中,每個工位都相互靠攏。該車將從第一個車站組裝到最後一個。 如果沒有任何問題,最終你會得到一輛完整的汽車。 這對於編譯器例子也是如此。您從上次編譯過程中獲得二進制代碼。

另一方面,分層體系結構決定組件被分組在所謂的層中。 通常,客戶端(訪問系統的用戶或組件)只能從最頂層訪問系統。他也不在乎系統有多少層。他只關心他正在訪問的層的結果(這是最高層的結果)。 這與輸出來自最後一個過濾器的管道和過濾器不同。

另外,正如您所說,同一層中的組件正在使用來自較低層的「服務」。 但是,並非來自下層的所有服務都必須被訪問。 也不是上層必須訪問下層。 只要客戶得到他想要的東西,系統就可以工作。 與TCP/IP架構類似,用戶正在使用應用程序層的Web瀏覽器,而無需瞭解Web瀏覽器或任何底層協議如何工作。

對於您的問題,分層架構中的「層次結構」只是一個邏輯模型。 你可以說它們是包或者一些組件訪問鏈中的組件。 這裏的關鍵是結果必須從最後一個組件返回到第一個組件(客戶端正在訪問的地方)。 (與管道和過濾器相反,客戶端從最後一個組件獲得結果)

3

1。)分層架構分層架構,它把整個系統 - 該軟件系統在不同級別的層次結構的分解成邏輯模塊結構

層次結構。

其中作爲

2.)管道和過濾器數據流體系結構,它把整個系統 - 上連續集合

一系列變換的數據

其中數據在它上面的操作是相互獨立的。