用VS2005.NET進行三層結構應用程序的開發

1.三層之間的關係:

三層是指:界面顯示層(UI),業務邏輯層(Business),數據操作層(Data Access)

文字描述:

Clients對UI進行操作,UI調用Business進行相應的運算和處理,Business通過Data Access對Data Base進行操作。
 優點:
1、增加了代碼的重用。Data Access可在多個項目中公用;Business可在同一項目的不同地方使用(如某個軟件B/S和C/S部分可以共用一系列的Business組件)。
2、使得軟件的分層更加明晰,便於開發和維護。美工人員可以很方便地設計UI設計,並在其中調用Business給出的接口,而程序開發人員則可以專注的進行代碼的編寫和功能的實現。

2.Data Access的具體實現:
DataAgent類型中變量和方法的說明:
 
private string m_strConnectionString; //連接字符串
private OleDbConnection m_objConnection; //數據庫連接
 
public DataAgent(string strConnection) //構造方法,傳入的參數爲連接字符串
private void OpenDataBase() //打開數據庫連接
private void #region CloseDataBase() //關閉數據庫連接
public DataView GetDataView(string strSqlStat) //根據傳入的連接字符串返回DataView
 
具體實現代碼如下:
 
     public class DataAgent
     {
 
         #region Variables
 
         private string m_strConnectionString;
         private OleDbConnection m_objConnection;
 
         #endregion Variables
 
         #region Functions
 
         #region DataAgend
         ///<summary>
         /// Initial Function
         ///</summary>
         ///<param name="strConnection"></param>
         public DataAgent(string strConnection)
         {
              this.m_strConnectionString = strConnection;
         }
         #endregion DataAgend
 
         #region OpenDataBase
         ///<summary>
         /// function to open data base
         ///</summary>
         private void OpenDataBase()
         {
              try
              {
                   this.m_objConnection = new OleDbConnection();
                   this.m_objConnection.ConnectionString = this.m_strConnectionString;
 
                   if(this.m_objConnection.State != ConnectionState.Open)
                   {
                       this.m_objConnection.Open();
                   }
              }
              catch(Exception e)
              {
                   throw e;
              }
         }
         #endregion OpenDataBase
 
         #region CloseDataBase
         ///<summary>
         /// the function to cloase data base
         ///</summary>
         private void CloseDataBase()
         {
              if(this.m_objConnection != null)
              {
                   if(this.m_objConnection.State == ConnectionState.Open)
                   {
                        this.m_objConnection.Close();
                   }
              }
         }
         #endregion
 
         #region GetDataView
         ///<summary>
         /// Execute the sql and return the default table view
         ///</summary>
         ///<param name="strSelectString">Select String</param>
         ///<returns>DataView of the DataTable</returns>
         public DataView GetDataView(string strSqlStat)
         {
              try
              {
                   this.OpenDataBase();
                   OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSqlStat.Trim(),this.m_objConnection);
                   DataSet objDataSet = new DataSet();
                  objDataAdapter.Fill(objDataSet);
                   return objDataSet.Tables[0].DefaultView;
              }
              catch(Exception e)
              {
                   throw e;
              }
              finally
              {
                   this.CloseDataBase();
              }
         }
         #endregion GetDataTable
         #endregion Functions
 
     }

3.Business的具體實現:
建立名爲Base的類,此類作爲其他事務類的基類,其中定義了一個DataAgent的實例。其他所有的Business類都從該改類派生。
在該類中添加對DataAgent的引用,使所有的事務類都能使用DataAgent中的方法。
 
Base.cs源代碼:
 
     public abstract class Base
     {
         #region DataAgent
         private DataAgent m_objDBAgent;
 
         protected DataAgent OleDBAgent
         {
              get
              {
                   if(this.m_objDBAgent == null)
                   {
                       this.m_objDBAgent = this.CreateAgent();
                   }
                   return this.m_objDBAgent;
              }
              set
              {
                   this.m_objDBAgent = value;
              }
         }
         #endregion DataAgent
 
         public Base()
         {
         }
 
         #region CreateAgent
         ///<summary>
         /// Create a new DataAgent
         ///</summary>
         ///<returns>the DataAgent</returns>
         private DataAgent CreateAgent()
         {
              string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
              return new DataAgent(strConnection);
          }
         #endregion CreateAgent
    }
 
 
       準備好了數據操作層和事務層的基類,底下就可以正式地開始業務邏輯類的開發了,如有一個顯示新聞的類News,其中包含了一個GetNewsLsit()的方法,該方法用來獲取所有的新聞標題列表,代碼如下:
 
     public class News: Base
     {
         public News Contact()
         {
 
         }
 
         public DataView GetNewsList()
         {
              string strSql;
              strSql = "";
              strSql += "   SELECT Top 10 NewsId,NewsTitle ";
              strSql += "     FROM Tb_News";
              strSql += "    WHERE NewsEnable = 1";
              strSql += " ORDER BY NewsId ";
 
              return base.OleDBAgent.GetDataView(strSql);
 
         }
     }
 
由於數據庫結構比較簡單,在此就不再給出詳細的表結構。
 
4.UI層對Business中接口的調用
首先,在頁面中添加對News類的引用。
然後,在頁面中添加一個(DataGrid)dgNews用來顯示新聞列表。
在Page Behind的Page_Load方法中添加如下代碼:
 
         News objNews = new News();
         this.dgNews.DataSource = objNews.GetNewsList();
    this.dgNews.DataBind();
 
       至此,大功告成!

 
發佈了116 篇原創文章 · 獲贊 2 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章