华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
  當前位置:編程開發(fā) > DotNET > ASP.Net > 文章內容
  

ASP.NET教程:ASp.net剖析三層架構

 [ 2017年8月31日 ] 【

  本文不是從理論的角度來探討三層架構,而是用一個示例來介紹如何建設一個三層架構的項目,并說明項目中各個文件所處的層次與作用。寫本文的目的,不是為了說明自己的這個方法有多對,別人的肯定不對,而是希望給那些初學三層架構卻不知從何入手的朋友提供一點幫助。因為網(wǎng)上的文章,大多是注重理論的介紹,而忽略了具體的實踐應用,或者有示例但講得不透徹。導致看了之后,理論上又學習了一遍,但還是不知道代碼怎么寫。所以想從這個方面入手寫一下,讓從來沒做過三層架構的初學者也能照貓畫虎,寫出代碼來。文章表述的是筆者個人對三層架構的認識,肯定有許多不足的地方,歡迎大家指正,小弟也會根據(jù)反饋來修改這篇文章。文中的代碼是偽代碼,僅用來闡明思路。

  一提三層架構,大家都知道是表現(xiàn)層(UI),業(yè)務邏輯層(BLL)和數(shù)據(jù)訪問層(DAL),而且每層如何細分也都有很多的方法。但具體代碼怎么寫,到底那些文件算在哪一層,卻是模模糊糊的。下面用一個簡單的例子來帶領大家實戰(zhàn)三層架構的項目,這個例子只有一個功能,就是用戶的簡單管理。

  首先建立一個空白解決方案,添加如下項目及文件

  1、添加ASP.NET Web Application項目,命名為UI,新建Web Form類型文件User.aspx(含User.aspx.cs)

  2、添加ClassLibrary項目,命名為BLL,新建Class類型文件UserBLL.cs

  3、添加ClassLibrary項目,命名為DAL,新建Class類型文件UserDAL.cs.添加SQLHelper引用。(這個是微軟的數(shù)據(jù)訪問類,也可以不用,直接編寫所有的數(shù)據(jù)訪問代碼。我一般用自己寫的數(shù)據(jù)訪問類DataAccessHelper )。

  4、添加ClassLibrary項目,命名為Model,新建Class類型文件UserModel.cs

  5、添加ClassLibrary項目,命名為IDAL,新建Interface類型文件IUserDAL.cs

  6、添加ClassLibrary項目,命名為ClassFactory

  相信大家已經看出來了,這個和Petshop的示例沒什么區(qū)別,而且更簡單,因為在下也是通過Petshop學習三層架構的。但一些朋友對于這幾個項目所處的層次,以及它們之間的關系,可能比較模糊,這里逐個說明一下:

  1、User.aspx和User.aspx.cs

  這兩個文件(以及文件所屬的項目,下面也是如此,不再重復強調了)都屬于表現(xiàn)層部分。User.aspx比較好理解,因為它就是顯示頁面了。User.aspx.cs有些人覺得不應該算,而是要劃到業(yè)務邏輯層中去。如果不做分層的話,那么讓User.aspx.cs來處理業(yè)務邏輯,甚至操作數(shù)據(jù)庫都沒什么問題,但是做分層的話,這樣就不應該了。在分層結構中,User.aspx.cs僅應該處理與顯示有關的內容,其它部分都不應該涉及。

  舉例:我們實現(xiàn)用列表方式顯示用戶的功能,那么提取信息的工作是由BLL來做的,UI(本例中是User.aspx.cs)調用BLL得到UserInfo后,通過代碼綁定到User.aspx的數(shù)據(jù)控件上,就實現(xiàn)了列表的顯示。在此過程中User.aspx.cs對UI沒有起到什么作用,僅是用來傳遞數(shù)據(jù),而且因為實際編碼中大部分情況都是如此的實現(xiàn),所以使有些人覺得User.aspx.cs不應該算UI,而應該并入BLL負責邏輯處理。繼續(xù)往下看,這時提出了一個新需求,要求在每個用戶的前面加一個圖標,生動地表現(xiàn)出用戶的性別,而且不滿18歲的用兒童圖標表示。這個需求的實現(xiàn),就輪到User.aspx.cs來做了,這種情況下User.aspx.cs才算有了真正的用途。

  2、NewBLL.cs

  添加如下方法:

  public IList GetUsers():返回所有的用戶信息列表

  public UserInfo GetUser(int UserId):返回指定用戶的詳細信息

  public bool AddUser(UserInfo User):新增用戶信息

  public bool ChangeUser(UserInfo User):更新用戶信息

  public void RemoveUser(int UserId):移除用戶信息

  此文件就屬于業(yè)務邏輯層了,專門用來處理與業(yè)務邏輯有關的操作。可能有很多人覺得這一層唯一的用途,就是把表現(xiàn)層傳過來的數(shù)據(jù)轉發(fā)給數(shù)據(jù)層。這種情況確實很多,但這只能說明項目比較簡單,或者項目本身與業(yè)務的關系結合的不緊密(比如當前比較流行的MIS),所以造成業(yè)務層無事可做,只起到了一個轉發(fā)的作用。但這不代表業(yè)務層可有可無,隨著項目的增大,或者業(yè)務關系比較多,業(yè)務層就會體現(xiàn)出它的作用來了。

  此處最可能造成錯誤的,就是把數(shù)據(jù)操作代碼劃在了業(yè)務邏輯層,而把數(shù)據(jù)庫作為了數(shù)據(jù)訪問層。

  舉例:有些朋友感覺BLL層意義不大,只是將DAL的數(shù)據(jù)提上來就轉發(fā)給了UI,而未作任何處理?匆幌逻@個例子

  BLL層

  SelectUser(UserInfo userInfo)根據(jù)傳入的username或email得到用戶詳細信息。

  IsExist(UserInfo userInfo)判斷指定的username或email是否存在。

  然后DAL也相應提供方法共BLL調用

  SelectUser(UserInfo userInfo)

  IsExist(UserInfo userInfo)

  這樣BLL確實只起到了一個傳遞的作用。

  但如果這樣做:

  BLL.IsExist(Userinfo userinfo)

  {

  UerInfo user = DAL.SelectUser(User);

  return (userInfo.Id != null);

  }

  那么DAL就無需實現(xiàn)IsExist()方法了,BLL中也就有了邏輯處理的代碼。

首頁 1 2 3 尾頁
本文糾錯】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關于本站  網(wǎng)站聲明  廣告服務  聯(lián)系方式  站內導航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
莫力| 长春市| 延安市| 香河县| 阿拉善右旗| 淮安市| 张家港市| 辽阳县| 阳春市| 星子县| 大埔区| 冷水江市| 台湾省| 苏尼特右旗| 武安市| 余干县| 通江县| 琼中| 郑州市| 永康市| 天津市| 六安市| 乌兰察布市| 蒙城县| 凌海市| 河西区| 彭泽县| 明溪县| 光泽县| 托里县| 醴陵市| 雅江县| 信丰县| 娄烦县| 大港区| 凤冈县| 平潭县| 会宁县| 东宁县| 东阿县| 金沙县|