學ASP.NET都知道它的最經典的架構是三層架構,也是目前應用得最廣泛的一種架構.以前說起三層架構大家都知道MVC架構,這是html開發中用得比較多的,現在AJAX主要就是用這種架構。大家ASP.NET的三層是指資料訪問層,商務邏輯層和展示層,而且都知道資料訪問層是用來訪問資料的,商務邏輯層是用來處理一些系統的商務邏輯的,展示層就是把內容呈現出來給使用者,與使用者進行互動的。劃分三層的好處就是每一層都是獨立的,修改其中一層一般不會影響其他層的代碼,這樣就大大的方便了日後的維護和升級。它最大的缺點是架構和編碼都比較複雜,而且對效能的提高沒有任何協助,反而還可能會降低執行效率。
有時候真的覺得“三層”編起來挺麻煩的,在ASP.NET 2.0裡,訪問資料和顯示出來只要拖兩個控制項就可以了(AccessDataSource/SQLDatasource和GridView),幾分鐘一個頁面就出來了,而且還具備了修改中,刪除,分頁,排序等功能。而用三層架構就麻煩多了,先要寫資料訪問層的代碼,接著寫商務邏輯層的代碼(要調用資料層的方法),最後才是展示層,也就是頁面的設計,還有調用商務邏輯層的代碼讀取資料。(注意:展示層是絕對不會訪問資料層的內容,只能通過業務層。業務層在這裡是串連它們的橋樑。所以說業務層是最重要的一層)既然這樣為什麼還要用三層呢?前面提到的一層架構的一個很大的問題就是前台和後台代碼沒有很好的分開,不利於分工,第二,不利於日後的維護和升級。如果是個人首頁或者是一些一個人完成的小系統用一層還是挺方面的。如果是一些比較大的系統,特別是企業級的應用,就非用三層甚至n層不可了。一般三層就很夠了,再劃分更多隻會增加設計和編碼的難度。
那到底怎麼去分層呢?怎麼樣分層就符合三層架構原則呢?這是很多剛入門的人經常問的問題。我翻了很多本案例書,可惜很多都是一層或者是兩層架構的,絕少三層的。後來研究了petshop4.0和下了一些國外的資料來看才開始對如何分層有點瞭解。我總結了一下主要有以下三種分層方式:
一:資料層不包含任何代碼,只有資料庫,還有相關的預存程序。
這種模式下,資料層看起來就變得很簡單了。只包含你建立的資料庫,和一些預存程序(注意是預存程序)。其實這些預存程序的建立也是相當複雜的(我以後會專門寫一篇這方面的文章),因為它們可以完成除資料訪問外的其他一些很強大的功能,如分頁,實現搜尋演算法等。資料訪問的邏輯就都放在業務層,當然業務層還包含其他一些邏輯代碼。我們來看一個樣本,假設資料庫裡有一個表BOOKS(書),建立一個預存程序GetAllBooks,用來讀取書的資訊,這樣在業務層裡編一個方法GetBookS()和一個公用資料庫訪問類,GetBooks()就通過資料庫訪問類開啟串連,執行在預存程序,返回資料(傳回型別可以是DataTable,DataSet,DataReader或者實體類)。業務層單獨編譯成一個或者幾個DLL檔案。接著就是展示層了,展示層通過調用GetBookS()返回資料繫結在相關的控制項裡。務層的方法都是在展示層調用。一般來說book.aspx和book.aspx.cs都是展示層的內容。所有前台的設計,相關控制項,資料緩衝都是屬於展示層。
二:資料層還包含所有公用資料存取碼。
這種模式和前一種差別不大,主要是把資料存取碼六到資料層。這樣可以很方面實現對多資料庫的支援。商務邏輯層直接調用資料層的相關訪問資料的代碼,完全不必瞭解底層是什麼資料庫。其他和前一種沒什麼分別。
三:所有資料讀取都放在資料層。
這種模式下像前面所述的GetBooks()方法都是放在資料層,在業務層再定義一個GetBookS()方法以供展示層調用。這種模式下業務層不但不必瞭解底層是什麼資料庫,而且連資料庫的結構都不必瞭解了。這可以說是最標準的三層架構了,在Microsoft的PetShop 4.0裡就是用這種模式。
以上就是我總結的一些內容,可能不是很準確,請大家多多指教。