什么是分層架構模式及常見的分層架構模式


什么是分層架構模式
分層(Layer)模式是最常見的一種架構模式。甚至說分層模式是很多架構模式的基礎,本章下面講到的一些內容實際上都和分層模式相關聯。
分層描述的是這樣一種架構設計過程:從最低級別的抽象開始,稱為第1層。這是系統的基礎。通過將第J層放置在第J-1層的上面逐步向上完成抽象階梯,直到到達功能的最高級別,稱為第N層

因而分層模式就可以定義為:將解決方案的組件分隔到不同的層中。每一層中的組件應保持內聚性,並且應大致在同一抽象級別。每一層都應與它下面的各層保持松散耦


分層模式的關鍵點在於確定依賴:即通過分層,可以限制子系統間的依賴關系,使系統以更松散的方式耦合,從而更易於維護。
相對於分層,還有一種概念叫分區。分層是對架構的橫向划分,而分區是對架構的縱向划分


典型的分層方式是應用程序專用功能位於上層,跨越應用程序領域的功能位於中層,而配置環境專用功能位於低層。層的數量與組成取決於問題領域和解決方案的復雜程度。通常而言只有一個應用程序專用層。應當把子系統組織成分層結構,架構的上層是應用程序專用子系統,架構的低層是硬件和操作專用子系統,中間件層是通用服務。
對系統進行分層有如下基本原則:
可見度。各子系統只能與同一層及其下一層的子系統存在依賴關系。 
— 易變性。最上層放置隨用戶需求的改變而改變的元素。最底層放置隨實施平台(硬件、語言、操作系統、數據庫等)的改變而改變的元素。中間的夾層放置廣泛適用於各種系統和實施環境的元素。如果在這些大類中進一步划分有助於對模型進行組織,則添加更多的層。 
— 通用性。一般將抽象的模型元素放置在模型的低層。如果它們不針對於具體的實施,則傾向於將其放置在中間層。 
— 層數。對於小型系統,三層就足夠了。對於復雜系統,通常需要5-7層。無論復雜程度如何,如果超過10層,就需要慎重考慮了。層數越多,越需慎重。
常見的分層架構模式
1.客戶端-服務器模型(Client-Server,C/S)。
2.三層模型:用戶表示層、業務邏輯層、數據層
3.多層結構的技術組成模型:表現層、中間層、數據層。
4.網絡系統常用三層結構:核心層、匯聚層和接入層。
5.RUP典型分層方法:應用層、專業業務層、中間件層、系統軟件層。
6.基於Java的B/S模式系統結構:瀏覽器端、服務器端、請求接收層、請求處理層。
7.某六層結構:功能層(用戶界面)、模塊層、組裝層(軟件總線)、服務層(數據處理)、數據層、核心層。

 

另一篇:

--------------------------------------------------------------------------------------------

第一章:分層

作用:分解復雜的軟件系統

優點:1、降低復雜度,上層不需要關注下層細節。

             2、提高靈活性,可以靈活替換某層的實現。

             3、減小耦合度,將層次間的依賴減到最低。

 4、有利於重用,同一層次可以有多種用途。

 5、有利於標准化。

缺點:1、不能封裝所有工作,可能會帶來及聯修改。

 2、過多層次影響性能。

難點:1、如何划分層次。

 2、定義層次職責。

 

分層演化過程:

單層架構-->兩層架構-->三層架構-->N層架構

單層架構:早期批處理系統

兩層架構:C/S 客戶/服務器模式

特點:沒有復雜的領域邏輯

優點:有非常好的工具支持,VBDelphiPowerBuilder

缺點:代碼冗余,難於維護。

模式:1、領域邏輯寫在客戶端

 2、領域邏輯寫在數據庫(存儲過程)

面向對象技術、WEB興起、Java出現共同推進了三層架構。

LayerTier的區別:

1Tier強調物理上的分離,Two Tier System

2Layer強調邏輯上的分層。

三層架構:表現層-領域層-數據源層(持久層)

1、表現層:提供服務,顯示信息。

2、領域層:系統核心邏輯。

3、數據源層:與數據庫、消息系統以及其他軟件包通信

------------------------------------------------------------------------------------------------

另一篇:

幾種常見架構模式

前文講過,在實踐中,人們總結出了一些常用的軟件系統結構高層模式,以供應用系統設計時參考。這些模式包括:單服務兩層/多層C/S;MVC結構;面向服務的SOA與多服務集合;數據交換總線等。

1. 單機應用系統(Standalone)

准確地講,單機應用系統是最簡單的軟件結構,是指運行在一台物理機器上的獨立應用程序。當然,該應用可以是多進程或多線程的。

在信息系統普及之前的時代,大多數軟件系統其實都是單機應用系統。這並不意味着它們簡單,實際情況是,這樣的系統有時更加復雜。這是因為軟件技術最初普及時,多數行業只是將軟件技術當做輔助手段來解決自己專業領域的問題,其中大多都是較深入的數學問題或圖形圖像處理算法的實現。

有些系統非常龐大:筆者早年曾經參與的一個大型純軟件系統開發,多達160萬行程序!要知道,這些程序當時可都是一行行寫出來的。這應該算是一個超大型的軟件系統了,共有十多個子系統集成在一個圖形界面上執行,並可在多行UNIX/DOS平台下運行,其中很多算法的復雜困難程度,可以說,如果講給今天這些所謂的架構高手與計算機高手聽,他們會感覺如聽“天書”一般深奧;有些系統則算法非常復雜:我的一個同學,在他們專業領域內編制的軟件程序,在當時最高級的專業工作站上(應該要比今天的最快的微機性能還好些),一敲回車鍵運行,就往往要等待一個星期的時間才能得到結果。

而這些軟件系統,從今天的軟件架構上來講,卻很簡單,是標准的單機系統。即便是今天,復雜的單機系統也有很多,它們大多都是專業領域的產品,如CAD/CAM領域的CATIA、ProEngineer,Autodesk的AutoCAD,還有我們熟悉的Photoshop、CoralDraw,等等(這些系統的高級版本可能提供了一些網絡化的功能,但改變不了其單機系統的實質)。

所以這里筆者要說的是,軟件架構復雜並不代表軟件系統復雜,其實,軟件架構設計較為重要的領域只有一個,那就是信息系統領域,即以數據處理(數據存儲,傳輸,安全,查詢,展示等)為核心的軟件系統。其他行業的軟件應用對該概念其實並不是那么強調。

所以,讀者應該明白,后面幾節介紹的所謂流行軟件架構,都是指在信息系統的領域內。

2. 客戶機/服務器(Client/Server)結構

客戶機/服務器結構是軟件系統中最常見的一種。筆者認為該概念應該來源於基於TCP/IP協議的進程間通信IPC編程的“發送”與“反射”程序結構,即Client方向Server方發送一個TCP或UDP包,然后Server方根據接收到的請求向Client方回送TCP或UDP數據包(這里是指建立TCP/IP連接以后的應用程序邏輯,不涉及如TCP建立連接的三方握手過程),IPC編程的客戶端/服務器概念圖如圖6-2所示。、

誠然,上述IPC編程中的客戶與服務,在過去只是一個再普通、傳統不過的標准程序結構與編程方法,不會有人將其提高到軟件架構的高度。但其實,現代流行的各種C/S架構,其本質卻正是如此:即TCP/IP IPC編程中的客戶機/服務器。目前為止,還沒有任何一種客戶機/服務器架構的軟件超出了這個范圍。

所以,准確地講,現代各種客戶機/服務器模式的軟件架構實際上是對IPC編程中客戶/服務程序結構更加產品化與成熟化的結果。

讓我們來看看幾種常見的客戶機/服務器的軟件結構。

● 兩層C/S

兩層C/S,其實完全是IPC客戶端/服務器結構的應用系統體現。兩層C/S其實就是人們所說的“胖客戶端”模式

在實際的系統設計中,該類結構主要是指前台客戶端+后台數據庫管理系統,如圖6-3所示。


在兩層C/S結構中,圖6-3前台界面+后台數據庫服務的模式最為典型,前文所說的很多數據庫前端開發工具(如PowerBuilder、Delphi、VB)等都是用來專門制作這種結構的軟件系統的。

有人也許要問,上述典型的兩層C/S模式應該沒有你所說的TCP/IP通信呀?怎么你前面講所有的C/S模式都脫離不了這個范圍呢?其實,每一種數據庫都提供了其專用的訪問API或通用的ODBC/JDBC接口,如果這個數據庫的開發支持從不同的機器上以網絡方式連接,則筆者相信其在客戶端與數據庫后台的通信大多情況下是TCP/IP的客戶機/服務器模式!如果這個數據庫不支持網絡連接方式(如以前基於FoxBase的開發,或現在基於MS Access的開發),則我們不能稱這個軟件是C/S模式。

另外,如圖6-3所示,兩層C/S實際上是將前台界面與相關的業務邏輯處理服務的內容集成在一個可運行單元中了。

層C/S結構與B/S

三層C/S結構如圖6-4(a)所示,其前台界面送往后台的請求中,除了數據庫存取操作以外,還有很多其他業務邏輯需要處理。三層C/S的前台界面與后台服務之間必須通過一種協議(自開發或采用標准協議)來通信(包括請求、回復、遠程函數調用等),通常包括以下幾種:

(1)基於TCP/IP協議,直接在底層socket api基礎上自行開發。這樣做一般只適合需求與功能簡單的小型系統;

(2)首先建立自定義的消息機制(封裝TCP/IP與socket編程),然后前台與后台之間的通信通過該消息機制來開發。消息機制可以基於XML,也可以基於字節流(Stream)定義。雖然是自開發,但可以基於此構建大型分布式系統;

(3)基於RPC編程;

(4)基於CORBA/IIOP協議;

(5)基於Java RMI;

(6)基於J2EE JMS;

(7)基於HTTP協議。如瀏覽器與Web服務器之間的交流便是如此。需要指出的是,HTTP不是面向對象的,所以面向對象的應用數據會被首先平面化后進行傳輸。

目前最典型的基於三層C/S結構的應用模式便是我們最熟悉、較流行的B/S(Brower/Server,瀏覽器/服務器)模式,如圖6-4(b)所示。

圖6-4(b)的B/S結構中,Web瀏覽器是一個用於文檔檢索和顯示的客戶應用程序,並通過超文本傳輸協議HTTP(HyperText Transfer Protocol)與Web服務器相連。該模式下,通用的、低成本的瀏覽器節省了兩層結構的C/S模式客戶端軟件的開發和維護費用。這些瀏覽器大家都很熟悉,包括MS Internet Explorer、Mozilla FireFox、NetScape等。

Web服務器是指駐留於因特網上某種類型計算機的程序。當Web瀏覽器(客戶端)連到服務器上並請求文件或數據時,服務器將處理該請求並將文件或數據發送到該瀏覽器上,附帶的信息會告訴瀏覽器如何查看該文件(即文件類型)。服務器使用HTTP(超文本傳輸協議)進行信息交流,這就是人們常把它們稱為HTTPD服務器的原因。

我們每天都在Web瀏覽器上進行各種操作,這些操作中絕大多數其實都是在Web服務器上執行的,Web瀏覽器只是將我們的請求以HTTP協議格式發送到Web服務器端或將返回的查詢結果顯示而已。當然,駐留Web瀏覽器與服務器的硬件設備可以是位於Web網絡上的兩台相距千里的計算機。

應該清楚,B/S模式的瀏覽器與Web服務器之間的通信仍然是TCP/IP,只是將協議格式在應用層標准化了而已。實際上B/S是采用了通用客戶端界面的三層C/S結構。

轉自:http://book.51cto.com/art/201004/195732.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM