三層架構分別是數據訪問層 database access layer,業務邏輯層business logic layer,用戶表現層(用戶接口層) user interface layer.簡稱分別爲DAL,BLL,UIL.
數據訪問層主要是提供一些通用的對數據庫進行操作的函數。業務邏輯層則調用這些函數完成某些功能,而用戶表現層則又調用業務邏輯層的函數來使用這些功能。
說起來比較簡單,但是到底是怎麼個實現法?不要着急,給你舉個小例子就明白了。
1,打開VS2005,建立一空白解決方案。注意是建立空白解決方案,而不是一個項目或者網站。建立方式是點擊菜單欄的新建項目。項目類型選其他項目類型->Visual Studio解決方案。右邊的模板選擇空白解決方案,填寫名稱,選擇位置,點擊確定即可。
2,打開解決方案資源管理器,右鍵點擊此解決方案名稱新建->新建項目,項目類型爲類庫,使用語言選C#,命名爲DAL.用同樣的方法再新建一個項目命名爲BLL,然後再新建一個ASP.NET網站,使用語言爲c#,命名爲 UIL.
3,添加項目BLL對項目DAL的引用。以及網站UIL對項目BLL的引用。方法是在資源管理器中右擊項目名稱,添加引用。在彈出的對話框中選中項目標籤,選擇適當的項目點擊確定。
4,在項目DAL中添加一個新的類文件,名稱爲dataaccess.cs.然後在此類文件中寫入那些訪問數據庫或者xml文件的通用的方法,以供BLL層的調用。我通常使用的是一個微軟企業庫的組件,調用了裏面操作數據庫的方法。
先舉個簡單的例子,假設下面這個函數是根據傳來的查詢語句,返回一個dataset對象。
/// <summary>
/// 執行查詢,返回數據集
/// </summary>
/// <param name="connectionName">連接字符串名</param>
/// <param name="commandType">命令類型(存儲過程或T-SQL查詢語句)</param>
/// <param name="command">存儲過程名或T-Sql查詢語句</param>
/// <returns>數據集</returns>
public static DataSet ExecuteDataSet(QueryType commandType, string command)
{
SqlConnection mysqlconnection = new SqlConnection(myconnectionstring);
……
Mysqlconnection.close();
Return mydataset;
}
5,假設我們在用戶表現層要實現一個功能,就是根據一個用戶ID獲取用戶的詳細信息。那麼就要在業務邏輯層設計這個函數。
在BLL項目中添加一個新類TheUser.
其中部分代碼爲:
Public class TheUser
{
…
///<summary>
///根據用戶Id返回用戶詳細信息
///</summary>
/// <param name="userid">用戶ID</param>
/// <returns>數據集</returns>
Public static DataSet GetUserInfoById(string userid) //函數定義爲靜態函數可以不用聲明新類而直接調用
{
String strSql = “select * from UserInfo where UserId = ” + userid;
Return DAL.DataAccess.ExecuteDataSet(commandType.Text,strSql); //調用數據訪問層函數,DAL爲其命名空間
}
…
}
6,在用戶接口層來調用這個函數.
在UIL網站中建立一個頁面,在其.cs文件中要調用的函數中加入如下代碼:
…
String UserId = “001”;
DataSet dsUserInfo = BLL.TheUser.GetUeserInfoById(UserId); //調用業務邏輯層函數。BLL爲命名空間
DataTabel dtUserInfo = dsUserInfo.Tables[0];
…
這就是三層結構大體的樣子。它的好處是結構清楚,功能模塊清晰,出現異常能迅速定位排除。這種模式開發出來的代碼非常美觀,簡潔,別人閱讀起來特別方便。
另外告訴大家一個vs2005使用中的小技巧,目前還不知道的可以嘗試下。當你寫完一個函數要加註釋的時候,在此函數名的上面一行打三個/(c#語言是三個/,vb裏是三個’)。然後你會發現程序自動出現了層次清晰的註釋代碼。你只需要在該加註釋的地方補充你的註釋即可。這樣的註釋看起來很漂亮,而且你以後調用的時候能看到它的動態提示。