1. 程式人生 > >三層架構C/S程式設計例項(C#描述)

三層架構C/S程式設計例項(C#描述)

1.三層之間的關係: 三層是指:介面顯示層(UI),業務邏輯層(Business),資料操作層(Data Access) 文字描述: Clients對UI進行操作,UI呼叫Business進行相應的運算和處理,Business通過Data Access對Data Base進行操作。 優點: l增加了程式碼的重用。Data Access可在多個專案中公用;Business可在同一專案的不同地方使用(如某個軟體B/S和C/S部分可以共用一系列的Business元件)。 l使得軟體的分層更加明晰,便於開發和維護。美工人員可以很方便地設計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 {     private string m_strConnectionString;    private OleDbConnection m_objConnection;     #region DataAgend     ///<summary>     /// Initial Function     ///</summary>     ///<param name="strConnection"></param>     public DataAgent(string strConnection)     {         this
.m_strConnectionString = strConnection;
    }     #endregion     #region OpenDataBase     ///<summary>     /// Open Database     ///</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     #region CloseDataBase     ///<summary>     /// Close Database     ///</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 } 3.Business的具體實現: 建立名為Base的類,此類作為其他事務類的基類,其中定義了一個DataAgent的例項。其他所有的Business類都從該改類派生。 在該類中新增對DataAgent的引用,使所有的事務類都能使用DataAgent中的方法。 Base.cs原始碼: public abstract class Base {     protected DataAgent OleDBAgent = new DataAgent("Provider=SQLOLEDB;Data Source=(local);DataBase=test;User ID=sa;PWD="); } 準備好了資料操作層和事務層的基類,底下就可以正式地開始業務邏輯類的開發了,如有一個顯示新聞的類News,其中包含了一個GetNewsList()的方法,該方法用來獲取所有的新聞標題列表,程式碼如下: public class News : Base {     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 OleDBAgent.GetDataView(strSql);     } } 由於資料庫結構比較簡單,在此就不再給出詳細的表結構。 4.UI層對Business中介面的呼叫 首先,在窗體Form1中新增對News類的引用。 然後,在窗體Form1中新增一個(DataGridView)dgNews用來顯示新聞列表。 在窗體的Form1_Load方法中新增如下程式碼: private void Form1_Load(object sender, EventArgs e) {     News objNews = new News();     this.dgNews.DataSource = objNews.GetNewsList(); }