分層架構淺析

技術總是隨着時代而進步。跟隨着硬件的摩爾定律的飛速發展,現在的軟件和傳統的軟件也有了天壤之別。傳統的軟件由於受到硬件速度和存儲空間的制約,不得不在算法上大做文章,以節省本來就少得可憐的硬件空間和有限的CPU 資源,而現今的軟件則不同,高速的CPU 處理能力,超大容量的存儲空間,使得軟件在算法上的選擇空間更大,當然,這裏的意思並不是說,現在的軟件設計不需要設計算法,而是說在設計過程中可以有更多的選擇,可以同時兼顧軟件的效率和其他特性(可擴展性、易用性、穩定性等)。於是,系統分層應運而生。

1.1            經典三層結構

1.1.1 經典三層結構概述

三 層架構即將系統分爲三層,分別是數據訪問層、業務邏輯層和表示層。其中,數據訪問層實現對數據庫操作的封裝,以隔離具體業務和數據庫之間的聯繫;而業務邏 輯層則實現對業務邏輯的封裝,隔離用戶操作的界面和具體業務邏輯;表示層即用戶界面層,提供用戶操作接口。這樣分層封裝的好處是分化了複雜的系統,同時也 提高了系統的可維護性,也使得開發過程中的分工協作更加方便快捷。

以下是經典三層結構的簡單圖示:

Oracle 數據庫

Sql Server 數據庫

表示層

業務邏輯層

數據訪問層

用戶

從 上圖中可以看出,用戶所能看到的只有他所操作的界面——表示層,其它各層對表示層都是隱藏實現的。這樣做的好處在於,一方面提高了安全性,用戶只能通過界 面上的操作來進行業務,杜絕了違規操作的可能;另一方面,業務邏輯層和數據訪問層的分離,在一定程度上保證了系統的可擴展性,在新增一個業務邏輯或者某個 已存在的業務邏輯發生改變時,數據訪問層可能不需要改變,或者在更改數據庫服務器時,業務邏輯層不需要有任何改變,只要更新數據訪問層即可。

1.1.2      經典三層結構的詳細描述

我們來看一下三層結構中各層的描述及詳細結構:

一、數據訪問層

數據訪問層的主要功能是提供訪問不同數據庫的方法的封裝。該層處在系統的最底層,對上層用戶隱藏實現。在業務邏輯層通過調用數據訪問層的接口來完成其操作。具體靜態結構圖如下所示:

其具體實現過程是:首先通過DALFactory 創建SQLServerDALOracleDAL 中類的實例, 並將其賦予他們的父類IDAL (接口) ,然後通過IDAL 的類的實例來調用其相應的方法已實現複雜的業務邏輯(面向對象技術)。

二、業務邏輯層

業務邏輯層的主要功能是提供業務邏輯的封裝,對其上面的表示層隱藏實現。在表示層通過調用業務邏輯層的接口來實現各操作。其靜態結構圖如下所示:

業務邏輯層主要依賴於數據訪問工廠和數據訪問層的接口。

三、 表示層

表示層主要是提供用戶的操作界面(用戶接口),具體的業務邏輯通過調用業務邏輯層的方法實現。

1.1.3      總結

分 層架構的主要優點是分化了系統的複雜度,同時也提高了系統的靈活性(這點從系統同時滿足各種類型數據庫即可看出),另外,分層架構大大提高,由於層次的增 多,同一個了系統的可維護性和可擴展性。但是,分層架構在衆多優點的背後也隱藏着缺點解決方案下項目也多,過多的跨項目訪問對應用程序的效率有一定的影 響,但這一點現在可以在越來越快的硬件提升速度中忽略。

1.2            簡單三層結構

對於某些小型的MIS 項目,如果嚴格按照經典三層結構來設計,則會因爲層次上項目過多而導致系統繁瑣,所以提出一個經典三層結構的變體——簡單三層結構。

簡單三層結構可以有兩種表現形式,一種是系統要求數據訪問的靈活性較高,而業務邏輯層和表示層卻相對固定,此時可以將業務邏輯層和表示層相結合,形成一個兩層的結構,即:

Orcale 數據庫

Sql Server 數據庫

表示層

業務邏輯層

數據訪問層

而另一種則是系統要求業務邏輯靈活多變,而表示層卻相對固定,此時可以將業務邏輯層和數據訪問層相結合,而將相對固定的表示層獨立出來,形成一個兩層結構,即:

Orcale 數據庫

Sql Server 數據庫

表示層

業務邏輯層

數據訪問層

    以 上是簡單三層結構的兩種表現形式,其實這種結構是在綜合了小型信息管理系統的性能和靈活性兩方面來考慮的,它可以在一定程度上滿足系統靈活性的要求,也可 以在一定程度上滿足性能要求(就目前硬件的速度來看,軟件對性能的要求會越來越低,但這並不能說明我們在開發過程中可以不去考慮性能問題,只是說在性能上 可以適當放寬要求)。

1.3            三層結構的擴展——五層邏輯架構

邏輯N 層架構的好處就是把所有的功能區分開,形成清晰的角色或組,是軟件的架構變的更加清晰和克維護。

1.3.1 五層邏輯架構概述

這個擴展的五層邏輯架構的層次分別爲:表示層、用戶界面層、業務邏輯層、數據訪問層、數據存儲和管理層。以下將分別對這幾個層次進行簡單介紹。

表示層

用戶界面層

業務邏輯層

數據訪問層

數據存儲和管理層

一、            表示層

爲什麼要將表示層和用戶界面層分離開來呢?從Windows 桌面應用來說,表示層和UI 層是同一層,即用戶能操作的圖形用戶界面(GUI )。但是從Web 應用的角度來看,區別就比較明顯了。用戶所看到的界面(瀏覽器)只負責將信息顯示給用戶和採集用戶輸入的數據信息,而實際的操作邏輯卻運行在服務器端。

二、            用戶界面層

這一層的作用主要是決定用戶程序的外觀和解釋用戶輸入的邏輯。在許多的應用程序中,UI 代碼非常複雜,它是以一種非線性的方式來響應用戶的請求(控制用戶如何點擊控件,或者是進入或離開窗體或頁面是很困難的),另外,UI 層代碼還必須要和業務邏輯層的邏輯互操作來驗證用戶的輸入,並對用戶的輸入作必要的處理。

UI 層存在的作用基本上就是接受用戶的輸入,然後提供給業務邏輯層,在業務邏輯層中用戶的輸入得到驗證、處理或操作,然後UI 層再把業務邏輯層所得到的結果給客戶顯示出來以響應用戶。

三、            業務邏輯層

業務邏輯層包括所有的業務規則、數據驗證、數據操作、數據處理和應用程序的安全性。它制定了企業的業務處理方式。

如果你希望所做的軟件能夠獲得不斷增加的可維護性和可重用性的好處的話,把業務邏輯層和用戶界面層相分離絕對是非常關鍵的。因爲任何延伸到UI 層的業務邏輯都只存在於特定的UI 當中,任何以後可能創建的UI 都無法使用。

四、            數據訪問層

數據訪問代碼是通過與數據管理層進行交互來提取、插入、更新和刪除數據信息的。數據訪問層並不管理和存儲數據,它只是在業務邏輯和數據庫之間提供一個接口。

其實,這樣做的好處還有一個。大家都知道,數據訪問技術的變動是很頻繁的(從ODBCDAOOLEDBADOADO.Net 等),這意味着每一次數據訪問技術的變動都要重寫那些數據訪問的代碼,如果把數據訪問放到一個單獨的、特定的層裏,上面的改變對應用程序的衝擊會降低許多。

五、            數據存儲和管理層

這一層的關鍵在於它對所處理的數據進行物理的創建、提取、更新和刪除。這和數據訪問層不同,數據訪問層只是對創建、提取、更新和刪除數據提出請求。數據管理層實際上是在數據庫中實現這些操作。

下面讓我看看這五層分別扮演的角色:

層次

角色

表示層

負責顯示和蒐集用戶輸入

用戶界面層

用戶和業務邏輯之間的中間層,負責蒐集用戶輸入並提供給業務邏輯,然後把結果返回給用戶

業務邏輯層

負責提供應用程序所有的業務規則、數據驗證、數據操作、數據處理和安全

數據訪問層

業務邏輯和數據管理之間的中間層,封裝當前主要的數據訪問技術、數據庫和數據結構的信息

數據存儲和管理層

負責數據在一個持久的數據存儲中物理的創建、提取、更新和刪除

1.3.2 五層邏輯架構的最優性能模型

當所有的焦點都集中在分佈式系統的時候,大家很容易地忘記了單層解決方案的價值。我們可以把所與的東西運行在同一臺客戶機上,系統部署在一個單一的物理層(客戶機)上並不會對邏輯架構的分離造成傷害。如下圖所示:

表示層

用戶界面層

業務邏輯層

數據訪問層

數據存儲和管理層

我覺得這一點的重要性是不言而喻的:N 層系統可以運行在同一臺電腦上來支持需要獨立環境的許多種應用程序。其實,這和兩層的胖客戶端的物理架構是基本上一樣的,唯一的區別就是數據存儲和管理層將運行在中央數據庫服務器上(如Sql ServerOracle ),如下圖所示:

表示層

用戶界面層

業務邏輯層

數據訪問層

數據存儲和管理層

除了數據存儲的位置不同以外,這與單層配置一模一樣,而且通常從單層到兩層的切換出了修改數據庫設置字符串外,幾乎沒有什麼其他要做的。

1.3.3 五層邏輯架構的高可擴展性模型

單層配置適用於獨立環境,它們的高性能是毋庸置疑的(不需要考慮任何的網絡延遲問題),但缺點也很明顯——可擴展性能差。通常會使用兩層的配置,這樣可以兼顧性能和可擴展性。

進 一步來看,我們可以通過將數據庫訪問層移到一臺獨立的電腦上的辦法來犧牲一部份性能以換取可擴展性。如果你有超過一百個並行的用戶,你就可以從使用單獨的 服務器來處理數據訪問中獲得好處。這樣做的另一種好處是安全。因爲數據訪問層包含有直接操作數據庫的代碼,所以運行數據庫訪問層的電腦一定要有用來訪問數 據庫服務器的用戶名和密碼。與其在客戶機上保存這些用戶名和密碼,不如將它移到應用服務器上,這樣用戶的電腦就不需要保存訪問數據庫服務器的用戶名和密 碼,提高了安全性。

另外,我們也可以將業務邏輯層移到應用服務器上,這對於非交互的業務邏輯非常有用,如批量更新或數據密集型的業務算法。然而,大多數的應用程序允許用戶交互,所以又要求業務邏輯運行在客戶機端,提供高級別的用戶交互性能。

這樣,數據訪問層可以移到單獨的應用服務器上,而業務邏輯層可以同時運行在客戶機端和應用服務器上,如下圖所示:

表示層

用戶界面層

業務邏輯層

業務邏輯層

數據訪問層

數據存儲和管理層

客戶機端

數據庫服務器

應用服務器

1.4            邏輯架構總結

邏輯架構定義瞭如何分離應用程序中不同的代碼。一個好的邏輯架構的目的是使代碼更容易維護、理解和可重用。而物理架構的定義則指定了運行應用程序的電腦,一個好的物理架構目的在於使系統在性能、可擴展性、安全性和容錯能力之間取得最好的平衡,來滿足你的特定環境。

分 層架構的主要優點是分化了系統的複雜度,同時也提高了系統的靈活性(這點從系統同時滿足各種類型數據庫即可看出),另外,分層架構大大提高了系統的可維護 性和可擴展性。但是,分層架構在衆多優點的背後也隱藏着缺點,由於層次的增多,同一個解決方案下項目也多,過多的跨項目訪問對應用程序的效率有一定的影 響,但這一點現在可以在越來越快的硬件提升速度中忽略。

 

http://blog.csdn.net/thfthf2/archive/2007/10/31/1859025.aspx

發佈了110 篇原創文章 · 獲贊 4 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章