c#代碼三層之間的關係

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


     }



<script type="text/JavaScript"> var alimama_pid="mm_10066750_366226_571935"; var alimama_titlecolor="0000FF"; var alimama_descolor ="000000"; var alimama_bgcolor="FFFFFF"; var alimama_bordercolor="E6E6E6"; var alimama_linkcolor="008000"; var alimama_bottomcolor="FFFFFF"; var alimama_anglesize="10"; var alimama_bgpic="12"; var alimama_icon="0"; var alimama_sizecode="33"; var alimama_width=360; var alimama_height=190; var alimama_type=2; </script> <script src="http://p.alimama.com/inf.js" type="text/javascript"> </script>


建立名爲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();



     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章