ASP.NET應用程式的三層設計模型(學習)

來源:互聯網
上載者:User

回顧ASP

ASP (Active Server Page) 的功能

可以把VBScript 編寫的伺服器端指令碼嵌入到Web頁面中, 在伺服器端動態產生頁面內容;

可以通過COM 組件與資料庫連接, 從而提供強大的交易處理功能。

ASP的缺點

(1) 由於用指令碼語言編寫的控制邏輯要嵌入到HTML標記中, 因此ASP頁面的開發效率低, 後期維護困難;

(2) 動態部分採用指令碼語言編寫, 其功能受到限制, 不利於開發複雜的程式;

(3) 程式員要自己維護頁面之間資料的傳遞工作;

(4) ASP技術很難採用物件導向的思路和方法來開發程式;

關於ASP.NET

可以採用WebForm編程模型, 該模型由底層系統自動完成客戶(Client) 和伺服器(Server) 之間繁瑣的互動, 而且還提供了狀態管理功能, 能在不同頁面請求之間自動維護頁面資料。

關於B/S 結構

與傳統的C/S (Ciient/Server) 結構不同, B/S 結構中的大部分功能都在伺服器端實現。伺服器根據使用者瀏覽器發送的請求, 在進行相應的運算和處理後, 向使用者瀏覽器發送Web頁面, 頁面由標準的HTML 文本和Javascript 用戶端指令碼構成。

ASP.NET的三層開發設計模型

分層模型的優點

每一層只實現相對獨立的功能,當任何一層發生變化時, 只要保持層間介面關係不變, 則其它各層都不會受到影響。

(1) 使用者介面層 (User Interface Tier):

顯示由商務邏輯層動態傳送的資料資訊,並通過使用相應的HTML 標籤和CSS (Cascade Style Sheet) 模式來實現。同時還要負責使用者錄入資料的獲得和校正,並傳送給商務邏輯層。

(2) 商務邏輯層 (Business Logic Tier):

為使用者介面層提供功能調用, 同時它又調用資料訪問層所提供的功能來訪問資料庫。還要根據系統設計, 構造工程中關鍵的幾個對象, 實現工程中的大部分邏輯控制功能。

(3) 資料訪問層 (Data Access Tier):

主要用來實現與資料庫的互動, 即完成查詢、插入、刪除和修改的功能。它根據商務邏輯層的要求,從資料庫中提取或修改資料。訪問資料庫是系統中最頻繁、最消耗資源的操作, 所以要最佳化對資料庫的訪問, 提高系統的效能和可靠性。

BBS 工程執行個體

整個工程被劃分為四個功能模組

目錄管理(Directory):採用“樹”結構實現;

文章管理(Article):文章存放在相應的目錄下;

使用者管理(User):對使用者的管理和授權;

許可權管理(Right):授權細化到各級目錄和每篇文章;


系統採用SQL Server 2000 Enterprise 資料庫,Visual Studio開發工具和C#語言。

整個工程為一個“方案”(solution),而分層模型中的每一層都對應為一個“項目”(Project),每個項目都對應各自的“名字空間”(Namespace),各個項目都從屬於方案。

本工程中包括四個項目,其中的Web、BussinessFacade 和DataAccess 項目分別對應設計模型的三個層次,還有一個項目Common用於定義層間的資料介面。結構:

(1) Web 項目

Web 項目與“使用者介面層”對應,在這一層中,每個WebForm 頁面顯示部分存放在aspx檔案中。

(2) BusinessFacade 項目

BusinessFacade 項目與“商務邏輯層”對應,在這一層中包括對四個“類”的定義:

DirectorySystem、ArticleSystem、UserSystem 和 RightSystem,它們對應於系統的四大功能。

例如在RightSystem 類中就提供了:

用於目錄許可權鑒別的CheckDirectoryRight 方法;

用於過濾目錄列表的FilterDirectoryList 方法;

用於使用者授權的AuthorizeUser 方法;

以及其它一些用於許可權管理的成員函數,這些成員函數可以在使用者介面層中直接調用。

在這一層中要引入DataAccess 項目的名字空間, 從而使用該項目提供的功能實現對資料庫的訪問。

(3) DataAccess 項目

DataAccess 項目與“資料訪問層”對應,在這一層中也包括四個“類”的定義:

DirectoryAccess、ArticleAccess、UserAccess 和RightAccess。每個類的成員函數都是根據商務邏輯層的要求來訪問SQL Server 中相應的預存程序(Stored Procedure)。

例如: 在ArticleAccess 類中的LoadDetailByID 方法,就是用來調用SQL Server 中的GetArticleDetailByIDStatus 預存程序,從而實現通過文章的ID和狀態得到文章的詳細資料。

在CLR 平台上進行.net 編程,一般由系統的垃圾收集機制(Garbage Collect)來消除不再使用的對象。但由於訪問資料庫將會消耗大量的系統資源, 所以這一層的四個類都派生自 System.IDisposable 介面(使用using 語句引用),使得在不使用本層對象的時候及時釋放掉所佔用的資源。

(4) Common 項目

為了使得各層之間在傳遞資料時具有統一的資料介面,在三個層次對應的項目之外又開發了一個Common 項目。在這個項目中定義了四個類:

DirectoryData、AricleData、UserData 和RightData。這些類都派生自System.Data.DataSet 類,在每個DataSet 中定義了一些DataTable 用來按照固定的格式儲存相應的資料。

對於Web、BusinessFacade 和DataAccess 項目中定義的類, 其成員函數的參數和傳回值的類型就可以採用Common 項目中定義的類, 這些類就是不同層之間資料傳送的標準介面。

附加代碼

在ASP.NET 支援下,利用ADO.NET 可方便地訪問基於Web 的資料庫,不管資料來源是關聯式資料庫、非結構的資料庫、文字資料庫(如XML檔案),還是如Microsoft Excel 一樣的表格式資料庫,都可通過ADO.NET來存取。

在實現遠端資料庫時,需要將ADO 與RDS 整合使用,以實現高效能、高可靠性的遠程操作功能。

DataGrid 控制項的更新Code 如下:

void editcommand (Object sender, DataGridCommandEventArgs e) 
{
  grid1.EditItemIndex = (int)e.Item.ItemIndex;
  //重新讀取資料並進行綁定
  bindgrid();
}
void Cancelcommand (Object sender, DataGridCommandEventArgs e) 
{
  grid1.EditItemIndex = -1;
  //重新讀取資料並進行綁定
  bindgrid();
}
void updatecommand (Object sender ,DataGridCommandEventArgs e) 
{
  //利用Sql 語句實現資料的更新
  string xm = grid1.DataKeys[(int)e.Item.ItemIndex];
  string[] cols[4];
  int numcols = e.Item. Cells.Count;

  for (int i = 2; i < numcols; i++) 
  {
    //取出各編輯框的值
   String colvalue = ((TextBox)e.Item.Cells[i].Controls[0]).Text;
   cols[i-2] = colvalue ;
  }
  string updatecmd ="UPDATE reg SET name ='"+ cols[0 ] +"',";
         updatecmd +="sex ='"+ cols[1] +"',addr ='"+ cols[2] +"',";
         updatecmd +="dh ='"+ cols[3] +"' where name =" + xm;

  SqlCommand mycommand = new SqlCommand(updatecmd, myconnection);
  mycommand.Connection.Open(); //開啟資料連線
  mycommand.ExecuteNonQuery(); //執行串連
  grid1.EditItemIndex = -1; //串連成功,返回初始狀態
  mycommand.Connection.Close(); //關閉串連
  bindgrid(); //重新讀取資料並綁定
}
void bindgrid() 
{
  //資料繫結
 SqlDataAdapter mycommand = new SqlDataAdapter("select * from reg", myconnection);
 DataSet ds = new DataSet();
 mycommand.Fill(ds,"reg");
 grid1.DataSource = ds.Tables["reg"].DefaultView;
 grid1.DataBind();
}

學習來源:http://www.cnki.net

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.