国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在c#中實現3層架構

2019-11-18 17:15:29
字體:
來源:轉載
供稿:網友

原版英文文章地址:http://www.codePRoject.com/csharp/three_tier_architecture.asp
介紹

這篇文章討論如何在c#中實現3層架構,使用MS access數據庫存儲數據。在此,我在3層架構中實現一個小型的可復用的組件保存客戶數據。并提供添加,更新,查找客戶數據的功能。

背景

首先,我介紹一些3層架構的理論知識。簡單說明:什么是3層架構?3層架構的優點是什么?

什么是3層架構?

3層架構是一種“客戶端-服務器”架構,在此架構中用戶接口,商業邏輯,數據保存以及數據訪問被設計為獨立的模塊。主要有3個層面,第一層(表現層,GUI層),第二層(商業對象,商業邏輯層),第三層(數據訪問層)。這些層可以單獨開發,單獨測試。

為什么要把程序代碼分為3層,把用戶接口層,商業邏輯層,數據訪問層分離有許多的優點。

 在快速開發中重用商業邏輯組件,我們已經在系統中實現添加,更新,刪除,查找客戶數據的組件。這個組件已經開發并且測試通過,我們可以在其他要保存客戶數據的項目中使用這個組件。

 系統比較容易遷移,商業邏輯層與數據訪問層是分離的,修改數據訪問層不會影響到商業邏輯層。系統如果從用SQL Server存儲數據遷移到用Oracle存儲數據,并不需要修改商業邏輯層組件和GUI組件

 系統容易修改,假如在商業層有一個小小的修改,我們不需要在用戶的機器上重裝整個系統。我們只需要更新商業邏輯組件就可以了。

 應用程序開發人員可以并行,獨立的開發單獨的層。

 代碼

 這個組件有3層,第一個層或者稱為GUI層用form實現,叫做FrmGUI。第二層或者稱為商業邏輯層,叫做BOCustomer,是Bussniess Object Customer的縮寫。最后是第三層或者稱為數據層,叫做DACustomer,是Data Access Customer的縮寫。為了方便我把三個層編譯到一個項目中。

 用戶接口層

   下面是用戶接口成的一段代碼,我只選取了調用商業邏輯層的一部分代碼。

//This function get the details from the user via GUI

//tier and calls the Add method of business logic layer.

private void cmdAdd_Click(object sender, System.EventArgs e)

{

      try

      {

            cus = new BOCustomer();

            cus.cusID=txtID.Text.ToString();

            cus.LName = txtLName.Text.ToString();

            cus.FName = txtFName.Text.ToString();

            cus.Tel= txtTel.Text.ToString();

            cus.Address = txtAddress.Text.ToString();

            cus.Add();

      }

      catch(Exception err)

      {

            MessageBox.Show(err.Message.ToString());

      }

}

 

//This function gets the ID from the user and finds the

//customer details and return the details in the form of

//a dataset via busniss object layer. Then it loops through

//the content of the dataset and fills the controls.

 

private void cmdFind_Click(object sender, System.EventArgs e)

{

      try

      {

            String cusID = txtID.Text.ToString();

                 

            BOCustomer thisCus = new BOCustomer();

                 

            DataSet ds = thisCus.Find(cusID);

 

            DataRow row;

            row = ds.Tables[0].Rows[0];

 

            //via looping

            foreach(DataRow rows in ds.Tables[0].Rows )

            {

               txtFName.Text = rows["CUS_F_NAME"].ToString();

               txtLName.Text = rows["CUS_L_NAME"].ToString();

               txtAddress.Text = rows["CUS_ADDRESS"].ToString();

               txtTel.Text = rows["CUS_TEL"].ToString();

           }

      }

      catch (Exception err)

      {

            MessageBox.Show(err.Message.ToString());

      }

 

}

 

//this function used to update the customer details.

private void cmdUpdate_Click(object sender,

                                 System.EventArgs e)

{

      try

      {

            cus = new BOCustomer();

            cus.cusID=txtID.Text.ToString();

            cus.LName = txtLName.Text.ToString();

            cus.FName = txtFName.Text.ToString();

            cus.Tel= txtTel.Text.ToString();

            cus.Address = txtAddress.Text.ToString();

 

            cus.Update();

      }

      catch(Exception err)

      {

            MessageBox.Show(err.Message.ToString());

      }

}

商業邏輯層

下面是商業邏輯層的所有代碼,主要包括定義customer對象的屬性。但這僅僅是個虛構的customer對象,如果需要可以加入其他的屬性。商業邏輯層還包括添加,更新,查找,等方法。

商業邏輯層是一個中間層,處于GUI層和數據訪問層中間。他有一個指向數據訪問層的引用cusData = new DACustomer().而且還引用了System.Data名字空間。商業邏輯層使用DataSet返回數據給GUI層。

 

using System;

using System.Data;

 

namespace _3tierarchitecture

{

      /// <SUMMARY>

      /// Summary description for BOCustomer.

      /// </SUMMARY>

     

      public class BOCustomer

      {

            //Customer properties

            private String fName;

            private String lName;

            private String cusId;

            private String address;

            private String tel;

 

            private DACustomer cusData;

 

       public BOCustomer()

       {

            //An instance of the Data access layer!

             cusData = new DACustomer();

         }  

 

 

 

            /// <SUMMARY>

            /// Property FirstName (String)

            /// </SUMMARY>

            public String FName

            {

     

                  get

                  {

                        return this.fName;

                  }

                  set

                  {

                        try

                        {

                              this.fName = value;

 

                              if (this.fName == "")

                              {

                                    throw new Exception(

                                      "Please provide first name ...");

                              }

                        }

                        catch(Exception e)

                        {

                              throw new Exception(e.Message.ToString());

                        }

                  }

            }

 

            /// <SUMMARY>

            /// Property LastName (String)

            /// </SUMMARY>

            public String LName

            {

                  get

                  {

                        return this.lName;

                  }

                  set

                  {

                        //could be more checkings here eg revmove ' chars

                        //change to proper case

                        //blah blah

                        this.lName = value;

                        if (this.LName == "")

                        {

                              throw new Exception("Please provide name ...");

                        }

 

                  }

            }

            

            /// <SUMMARY>

            /// Property Customer ID (String)

            /// </SUMMARY>

            public String cusID

            {

                  get

                  {

                        return this.cusId;

                  }

                  set

                  {

                        this.cusId = value;

                        if (this.cusID == "")

                        {

                              throw new Exception("Please provide ID ...");

                        }

 

                  }

            }

 

            /// <SUMMARY>

            /// Property Address (String)

            /// </SUMMARY>

            public String Address

            {

                  get

                  {

                        return this.address;

                  }

                  set

                  {

                        this.address = value;

 

                        if (this.Address == "")

                        {

                              throw new Exception("Please provide address ...");

                        }

                  }

            }

 

            /// <SUMMARY>

            /// Property Telephone (String)

            /// </SUMMARY>

            public String Tel

            {

                  get

                  {

                        return this.tel;

                  }

                  set

                  {

                        this.tel = value;

                        if (this.Tel == "")

                        {

                              throw new Exception("Please provide Tel ...");

                        }

 

                  }

            }

 

            /// <SUMMARY>

            /// Function Add new customer. Calls

            /// the function in Data layer.

            /// </SUMMARY>

            public void Add()

            {

                  cusData.Add(this);

            }

 

 

            /// <SUMMARY>

            /// Function Update customer details.

            /// Calls the function in Data layer.

            /// </SUMMARY>

            public void Update()

            {

                  cusData.Update(this);

            }

 

            /// <SUMMARY>

            /// Function Find customer. Calls the

            /// function in Data layer.

            /// It returns the details of the customer using

            /// customer ID via a Dataset to GUI tier.

            /// </SUMMARY>

            public DataSet Find(String str)

            {

                  if (str == "")

                      throw new Exception("Please provide ID to search");

                     

                  DataSet data = null;

 

                  data = cusData.Find(str);

 

                  return data;

            }

      }

}

 

數據訪問層

 數據層包括處理MS Access數據庫的細節。所有這些細節都是透明的,不會影響到商業邏輯層。數據訪問層有個指向商業邏輯層的引用BOCustomer cus。為了應用方便并且支持其他數據庫。
using System;

using System.Data.OleDb;

using System.Data;

 

namespace _3tierarchitecture

 

{

 

    /// <SUMMARY>

    /// Summary description for DACustomer.

    /// </SUMMARY>

    public class DACustomer

    {

        private OleDbConnection cnn;

        //change connection string as per the

        //folder you unzip the files

        private const string CnnStr =

          "Provider=Microsoft.Jet.OLEDB.4.0;Data " +

          "Source= D://Rahman_Backup//Programming//" +

             "Csharp//3tierarchitecture//customer.mdb;";

 

        //local variables

        private String strTable="";

        private String strFields="";

        private String strValues="";

        private String insertStr="";

       

        //this needs to be changed based on customer

        //table fields' Name of the database!

        private const String thisTable = "tblCustomer";

        private const String cus_ID = "CUS_ID";

        private const String cus_LName = "CUS_L_NAME";

        private const String cus_FName = "CUS_F_NAME";

        private const String cus_Tel = "CUS_TEL";

        private const String cus_Address = "CUS_ADDRESS";

 

 

        public DACustomer()

        {

        }

       

        public DACustomer(BOCustomer cus)

        {

            // A reference of the business object class

        }

       

        //standard dataset function that adds a new customer

 

        public void Add(BOCustomer cus)

        {

 

            String str = BuildAddString(cus);

           

            OpenCnn();

 

            //Open command option - cnn parameter is imporant

            OleDbCommand cmd = new OleDbCommand(str,cnn);

 

 

            //execute connection

            cmd.ExecuteNonQuery();

           

            // close connection

            CloseCnn();

           

        }

       

        //standard dataset function that updates

        //details of a customer based on ID

        public void Update(BOCustomer cus)

        {

            OpenCnn();

           

            String selectStr = "UPDATE " + thisTable +

                " set " + cus_LName + " = '" + cus.LName + "'" +

                ", " + cus_FName + " = '" + cus.FName + "'" +

                ", " + cus_Address + " = '" + cus.Address + "'" +

                ", " + cus_Tel + " = '" + cus.Tel + "'" +

                " where cus_ID = '" + cus.cusID + "'";

 

            OleDbCommand cmd = new OleDbCommand(selectStr,cnn);

 

            cmd.ExecuteNonQuery();

           

            CloseCnn();

        }

       

        //standard dataset function that finds and

        //return the detail of a customer in a dataset

        public DataSet Find(String argStr)

        {

            DataSet ds=null;

 

            try

            {

                OpenCnn();

           

                String selectStr = "select * from " + thisTable +

                              " where cus_ID = '" + argStr + "'";

                OleDbDataAdapter da =

                       new OleDbDataAdapter(selectStr,cnn);

                ds = new DataSet();

                da.Fill(ds,thisTable);

           

                CloseCnn();

 

               

            }

            catch(Exception e)

            {

                String Str = e.Message;

            }

 

            return ds;

        }

 

        private void OpenCnn()

        {

            // initialise connection

            String cnnStr = CnnStr;

            cnn = new OleDbConnection(cnnStr);

            // open connection

            cnn.Open();

        }

 

        private void CloseCnn()

        {

            // 5- step five

            cnn.Close();

        }

       

        // just a supporting function that builds

        // and return the insert string for dataset.

        private String BuildAddString(BOCustomer cus)

        {

            // these are the constants as

            // set in the top of this module.

            strTable="Insert into " + thisTable;

            strFields=" (" + cus_ID +

            "," + cus_LName +

            "," + cus_FName +

            "," + cus_Address +

            "," + cus_Tel + ")";

           

            //these are the attributes of the

            //customer business object.

            strValues= " Values ( '" + cus.cusID +

            "' , '" + cus.LName +

            "' , '" + cus.FName +

            "' , '" + cus.Address +

            "' , '" + cus.Tel + "' )";

 

            insertStr = strTable + strFields + strValues;

           

            return insertStr;

           

       }

    }

}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仆寺旗| 上思县| 怀安县| 澄城县| 德钦县| 阜城县| 鹤壁市| 伊通| 通化县| 大邑县| 吉木萨尔县| 唐山市| 通海县| 荔浦县| 鄂州市| 云和县| 宝坻区| 运城市| 拉萨市| 左权县| 怀化市| 仙居县| 平利县| 宁城县| 蕲春县| 丘北县| 靖宇县| 安溪县| 洛宁县| 凤冈县| 临洮县| 池州市| 江都市| 四会市| 宣汉县| 东至县| 广昌县| 三台县| 民丰县| 满城县| 汪清县|