文檔名稱:軟件架構風格(software architecture style) 文檔維護:Xuefeng Chang(welfear@gmail.com) 文檔建立:2013.07.27 若是說設計模式是從代碼角度爲系統下降耦合度,那麼架構風格即是從數據角度解耦。 架構是更加宏觀和全面的視角,它再也不是解決單一的技術問題,而是爲系統提供更加 完整的解決方案。 架構風格是一種粗粒度的軟件模式,爲常見軟件問題提供解決方案,促進軟件的重用。 常見的軟件架構風格以下: 1.Pipe & Filter 2.Batch 3.VM 4.Layered Architecture 5.MVC, PAC 6.MicroKernel 7.Event System 8.Blackboard System 9.Broker, C/S, P2P, SOA 參考http://www.infoq.com/news/2009/02/Architectural-Styles-Patterns 每種架構風格適用於某種特定的問題域,好比第九項所有是分佈式計算領域的架構風格。 從用戶最多見的GUI和CUI環境視角看: CUI經常是具備單一輸入和單一輸出,比較擅長處理有機械性、重複性和規律性的問題。 GUI更擅長有交互性的任務,它的輸入和輸出之間時常會變化並加以排列組合。 CUI和GUI是一種演化的關係: 1.當輸入是單一流或者多個單一流時,架構風格每每是Pipe & Filter/Batch/N Layered。 2.當輸入是多個流時,架構風格一般是MVC/PAC。 3.當須要合併多個輸入流時,則會使用Event System/MicrosKernel。 4.當須要合併多個輸出流時,則會使用Blackboard System。 對於1,在Linux中系統管理員和程序員經常使用Pipe & Filter處理文本流;而在流媒體系統中, Pipe & Filter用來demux視頻流和音頻流。這種固定輸入流的任務很容易實現批量功能而 變成Batch狀態。VM虛擬機能夠簡單看做是複雜輸入而沒有相應輸出的任務。Layed Arch 是一種存在依賴的Pipe & Filter,它的處理順序和流程已經事先設定好。 對於2,MVC不單單是設計模式,當它能解決多個輸入流問題時,它成爲爲一種架構風格。 MVC以及其衍生的MVVC, MVP, PAC將輸入模塊,數據模塊和協調控制模塊分解開來。相似的 模型比較強調Control的做用。 對於3和4,它們經常和MVC共同使用。3, 4表明一種處理更復雜問題的通常思路。數據可能 是輸入或輸出,也多是一種解耦的方式。好比實現接口的虛表就是一種解耦數據。直接 傳遞數據會下降系統性能,上下文情景分析和有效數據分離都會增長計算時間開銷。 Event System每每會維護原始的上下文和當前變化數據的信息,這些數據出如今輸入流的 最開始處理階段或着是先後處理模塊的銜接過程。Blackboard System強調了Model的做用, 擁有共同的Model特別是Domain Model能夠在更宏觀的層面上爲系統解耦或接入更多的 生產者與消費者。