熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

深入探討:如何理解.Net的三層架構

2013-11-13 12:13:23  來源: .NET編程 

  各層的作用

  數據數據訪問層:主要是對原始數據(數據庫或者文本文件等存放數據的形式)的操作層而不是指原始數據也就是說是對數據的操作而不是數據庫具體為業務邏輯層或表示層提供數據服務.

  業務邏輯層:主要是針對具體的問題的操作也可以理解成對數據層的操作對數據業務邏輯處理如果說數據層是積木那邏輯層就是對這些積木的搭建

  表示層:主要表示WEB方式也可以表示成WINFORM方式WEB方式也可以表現成:aspx 如果邏輯層相當強大和完善無論表現層如何定義和更改邏輯層都能完善地提供服務

  具體的區分方法

  數據數據訪問層:主要看你的數據層裡面有沒有包含邏輯處理實際上他的各個函數主要完成各個對數據文件的操作而不必管其他操作

  業務邏輯層:主要負責對數據層的操作也就是說把一些數據層的操作進行組合

  表示層:主要對用戶的請求接受以及數據的返回為客戶端提供應用程序的訪問

  三層結構解釋

  所謂三層體系結構是在客戶端與數據庫之間加入了一個中間層也叫組件層這裡所說的三層體系不是指物理上的三層不是簡單地放置三台機器就是三層體系結構也不僅僅有B/S應用才是三層體系結構三層是指邏輯上的三層即使這三個層放置到一台機器上 三層體系的應用程序將業務規則數據訪問合法性校驗等工作放到了中間層進行處理通常情況下客戶端不直接與數據庫進行交互而是通過COM/DCOM通訊與中間層建立連接再經由中間層與數據庫進行交換

  開發人員可以將應用的商業邏輯放在中間層應用服務器上把應用的業務邏輯與用戶界面分開在保證客戶端功能的前提下為用戶提供一個簡潔的界面這意味著如果需要修改應用程序代碼只需要對中間層應用服務器進行修改而不用修改成千上萬的客戶端應用程序從而使開發人員可以專注於應用系統核心業務邏輯的分析設計和開發簡化了應用系統的開發更新和升級工作

  那麼為什麼要應用中間業務層呢?舉些例子:

  我們假設有一段登錄代碼則可以這樣處理Web程序外觀層負責接收前台頁面的數據然後傳給中間層中間層對數據進行處理比如格式化防SQL注入等等一些這樣的數據再傳給數據訪問層然後與數據庫進行操作比如與數據庫的用戶名和密碼匹配等等一些代碼

  中間業務層的用途有很多例如驗證用戶輸入數據緩存從數據庫中讀取的數據等等……但是中間業務層的實際目的是將數據訪問層的最基礎的存儲邏輯組合起來形成一種業務規則例如在一個購物網站中有這樣的一個規則在該網站第一次購物的用戶系統為其自動注冊這樣的業務邏輯放在中間層最合適

  在數據訪問層最好不要出現任何業務邏輯!也就是說要保證數據訪問層的中的函數功能的原子性!即最小性和不可再分數據訪問層只管負責存儲或讀取數據就可以了

  完善的三層結構的要求是:修改表現層而不用修改邏輯層修改邏輯層而不用修改數據層否則你的應用是不是多層結構或者說是層結構的劃分和組織上是不是有問題就很難說不同的應用有不同的理解這只是一個概念的問題.
理解ASPNET中的三層結構——為什麼要分三層?

  我們用三層結構主要是使項目結構更清楚分工更明確有利於後期的維護和升級它未必會提升性能因為當子程序模塊未執行結束時主程序模塊只能處於等待狀態這說明將應用程序劃分層次會帶來其執行速度上的一些損失但從團隊開發效率角度上來講卻可以感受到大不相同的效果

  需要說明一下三層結構不是NET的專利也不是專門用在數據庫上的技術它是一種更加普適的架構設計理念

  個人感覺

  個人感覺此種架構要在數據庫設計上注意表之間的關系盡力滿足主與子的關系在功能上對用戶要有一定的限制不要表現在對於子表的刪除操作一定要慎重以免造成主表與子表的數據在邏輯上出現的主表的外鍵在子表中沒有相對應的值

  對於表的綜合查詢方法是

  先對主表查詢調用主表所對應的DL再根據主表的記錄分別對每一個子表進行查詢將自表的查詢結果添加的主表後形成一個大的查詢集合

  對於表的操作(增刪改)

  此時只對主表進行操作調用主表對應的DL中的操作方法
  RL層是邏輯判斷層主要是對頁面上傳入的數據進行邏輯判斷RL層之上就是UI

  如何建立一個三層體系結構解決方案

  新建一個空白解決方案然後

  添加新建項目其他項目企業級模版項目C#生成塊數據訪問(數據層下簡稱D層)
  添加新建項目其他項目企業級模版項目C#生成塊業務規則(業務層下簡稱C層)
  添加新建項目其他項目企業級模版項目C#生成塊Web用戶界面(界面層下簡稱U層)
  右鍵點解決方案項目依賴項設置U依賴於DCC依賴於D

  對U添加引用DC對C添加引用D

  到此為止一個三層的架子建立起來了我上面說的很具體很傻瓜知道的人覺得我廢話其實我這段時間很強烈的感覺到非常多的人其實對這個簡單的過程完全不了解雖然不反對建空項目Asp net Web應用程序項目也可以作為層的框架而且相當多的人認為其實這些企業級模板項目其實就是個空項目這是一個誤區沒錯企業級模板項目你從解決方案資源管理器裡看它是個什麼也沒有的但是你可以用記事本打開項目文件看見不同了吧??有些東西在背後你是看不見的不過系統已經做好了也就是說如果你在C層裡的某個類裡using System Data SqlClineit或者使用一個SqlConnection對象編譯時候不會出錯但是會在任務列表裡生成一些策略警告警告你在C層裡不要放應該放在D層的東西(雖然就程序來說沒錯但是可讀性可維護性就打了折扣)而這種功能空項目是無法給你的


From:http://tw.wingwit.com/Article/program/net/201311/15434.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.