程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 基於.NET平台的分層架構實戰(三)—架構概要設計

基於.NET平台的分層架構實戰(三)—架構概要設計

編輯:關於.NET

架構基本原則:

這裡,將描述一些在這個架構設計中的基本原則,其 中很多都是經典的設計原則,不過針對分層架構的特點,用我自己的語言進行了 描述。其中也有我自己提出的原則。

逐層調用原則及單向調用原則

現在約定將N層架構的各層依次編號為1、2、…、K、…、N -1、N,其中層的編號越大,則越處在上層。那麼,我們設計的架構應該滿足以下 兩個原則:

1.第K(1<K<=N)層只准依賴第K-1層,而不可依賴其他 底層。

2.如果P層依賴Q層,則P的編號一定大於Q。

其中第一個原 則,保證了依賴的逐層性,及整個架構的依賴是逐層向下的,而不能跨層依賴。 第二個原則,則保證了依賴的單向性,及只能上層依賴底層,而不能底層反過來 依賴上層。

針對接口編程,而不是針對實現編程

這裡所指的接口 ,不是特指編程語言中的具體語言元素(如C#中由Interface定義的語言接口), 而是指一種抽象的,在語義層面上起著接合作用語義體。它的具體實現,可能是 接口,可能是抽象類,甚至可能是具體類。

我認為,從不同的視角,接口 可以有以下兩種定義:

1.接口是一組規則的集合,它規定了實現本接口的 類或接口必須擁有的一組規則。體現了自然界“如果你是…… 則必須能……”的理念。

2.接口是在一定粒度視圖上 同類事物的抽象表示。注意這裡我強調了在一定粒度視圖上,因為“同類事 物”這個概念是相對的,它因為粒度視圖不同而不同。

具體到N層架 構中,針對接口編程的意義在部分上是這樣的:

現仍約定將N層架構的各 層依次編號為1、2、…、K、…、N-1、N,其中層的編號越大,則越 處在上層,那麼第K層不應該依賴具體一個K-1層,而應該依賴一個K-1層的接口, 即在第K層中不應該有K-1層中的某個具體類。

依賴倒置原則

在軟件設計原則中,有一種重要的思想叫做依賴倒置。它的核心思想是:不能讓高層 組件依賴底層組件,而且,不管高層組件和底層組件,兩者都應依賴於抽象。

那麼,這個原則和我們上面的原則是否矛盾呢?其實並不矛盾。

因為這個原則定義中的“依賴”是指“具體依賴”,而上 面定義中的依賴全部指“抽象依賴”。我對這兩種依賴的定義如下:

具體依賴——如果P層中有一個或一個以上的地方實例化了Q層 中某個具體類,則說P層具體依賴於Q層。

抽象依賴——如果P 層沒有實例化Q層中的具體類,而是在一個或一個以上的地方實例化了Q層中某個 接口,則說P層抽象依賴於Q層,也叫接口依賴於Q層。

從這兩個定義可以 看到,所謂的依賴倒置原則,正是上面提到針對接口編程,而不是針對實現編程 ,兩者在本質上是統一的。

綜上所述,可以看出,本課題設計的分層架構 ,應該是這樣一種架構:

1.N層架構的各層依次編號為1、2、…、K 、…、N-1、N,其中層的編號越大,則越處在上層。

2.架構中僅存 在一種依賴,即第K層接口依賴第K-1層,其中1<K<=N。

封裝變化原 則

封裝變化的原則定義為:找出應用中可能需要變化之處,把它們獨立出 來,不要和那些不需要變化的代碼混雜在一起。

開放-關閉原則

開 發-關閉原則定義為:對擴展開放,對修改關閉。

具體到N層架構中,可以 描述為:當某一層有了一個新的具體實現時,它應該可以在不修改其他層的情況 下,與此新實現無縫連接,順利交互。

單一歸屬原則

在這個架構 中,任何一個操作類都應該有單一的職責,屬於單獨的一層,而不能同時擔負兩 種職責或屬於多個層次(實體類及輔助類可以被多個層使用,但它們不屬於任何 一個層,而是獨立存在)。

層次劃分:

目前,典型的分層架構是 三層架構,即自底向上依次是數據訪問層、業務邏輯層和表示層。

這種經 典架構經歷了時間的考驗和實踐的多次檢驗,被認為是合理、有效的分層設計, 所以,在本文中,將沿襲這種經典架構,使用數據訪問層、業務邏輯層和表示層 的三層架構體系。

職責劃分:

目前,在典型的三層架構中,對層 次各自的職責劃分並沒有一個統一的規范,綜合現有的成功實踐和.NET平台的特 殊性,在本文中將三層架構的職責劃分如下:

數據訪問層—— 負責與數據源的交互,即數據的插入、刪除、修改以及從數據庫中讀出數據等操 作。對數據的正確性和有效性不負責,對數據的用途不了解,不負擔任何業務邏 輯。

業務邏輯層——負責系統領域業務的處理,負責邏輯性數 據的生成、處理及轉換。對流入的邏輯性數據的正確性及有效性負責,對流出的 邏輯性數據及用戶性數據不負責,對數據的呈現樣式不負責。

表示層 ——負責接收用戶的輸入、將輸出呈現給用戶以及訪問安全性驗證。 對流入的數據的正確性和有效性負責,對呈現樣式負責,對流出的數據正確性不 負責,但負責在數據不正確時給出相應的異常信息。

模塊劃分及交互設計 :

綜合以上分析,可在宏觀上將整個系統分為一下幾個模塊:

實 體類模塊——一組實體類的集合,負責整個系統中數據的封裝及傳遞 。

數據訪問層接口族——一組接口的集合,表示數據訪問層的 接口。

業務邏輯層接口族——一組接口的集合,表示業務邏輯 層的接口。

數據訪問層模塊——一組類的集合,完成數據訪問 層的具體功能,實現數據訪問層接口族。

業務邏輯層模塊—— 一組類的集合,完成業務邏輯層的具體功能,實現業務邏輯層接口族。

表 示層模塊——程序及可視元素的集合,負責完成表示層的具體功能。

IoC容器模塊——負責依賴注入的實現。

輔助類模塊 ——完成全局輔助性功能。

各模塊見交互關系如下:

這篇中理論比較多,但是它是整個架構的基礎,可以幫助朋友們對將要 實現的項目架構及要遵循的原則有一個整體的了解。當然,在後續文章中,將主 要討論Demo項目的實際開發過程,那時,這些思想和理論性的東西將得到體現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved