1. 程式人生 > >【C#】—三層總結

【C#】—三層總結

前言

三層敲完之後,有很多不理解的,程式碼直接看的視訊並不知道之間的值是怎麼傳的,後來逐句除錯了幾遍,把每句話的程式碼基本都寫上了,逐漸理解了。

三層是什麼

三層架構把整個軟體分為了三個層次:表現層(User Interface layer)、業務邏輯層(Business Logic Layer)、資料訪問層(Date access layer)

  • UI層稱為表現層,像使用者展示特定的業務資料,收集使用者的資訊(如使用者名稱密碼),最接近使用者。

  • BLL稱為業務邏輯層,對UI提供方法,呼叫DAL層提供的方法,判斷執行邏輯

  • DAL層稱為資料訪問層,僅包含對資料庫進增刪改查 如圖: 在這裡插入圖片描述

為什麼分三層

  • 方便團隊分工,一個程式設計師單獨完成一個軟體不是不可以的,但是大型軟體需要軟對的配合,問題是每個程式設計師編寫風格不一樣,就會造成後期除錯和維護比較困難,軟體分層後,合理分工,這樣的問題迎刃而解

  • 程式碼規範,在開發軟體時對每個層的程式碼進行規範,固定開發語言風格

  • 忽略資料庫差異,當軟體系統要換資料庫時,只要將資料訪問層的程式碼修改就好了

  • 實現“低耦合,高內聚”。把問題劃分開來各個解決易於控制,延伸,分配資源。 分層後代碼邏輯也清晰了,優點很多呀,相信每個人都有自己不同的體會和感受

生活中的理解

  • 使用者:相當於食客,食客通過服務員
  • BLL層:相當服務員,負責食客的點餐上菜,就如同UI層的登入指令
  • 業務邏輯層:相當於主廚,主廚從服務員那獲得通知,像助手要原材料(就像找資料庫要資料),然後將原材料繪製成成品交給服務員
  • 資料訪問層:相當於助手,助手從主廚獲得通知,在把材料提交給主廚 在這裡插入圖片描述 在這裡插入圖片描述 這樣每個層有問題就容易改了。
  • 服務員態度不好~~~~~~換服務員
  • 菜品味道不好~~~~~~~~換廚師
  • 菜品原材料不夠新鮮~~~換助手

通過例項講解三層架構

最簡單的登入來說,登入成功每個學生獲得10積分。 UI:使用者互動的功能,採集資訊的反饋結果

           //例項化B層服務類
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            //定義兩個變數來接收
            string Password = txtPassword.Text;
            string userName = txtUserName.Text.Trim();
            int ID =0 ;
            //把值傳入B層
            Login.Model.UserInfo user= mgr.UserLogin(ID,userName,Password);
            MessageBox.Show("登入成功" );

B層

 public Login.Model.UserInfo UserLogin(int ID,string userName,string Password)
        {
            
            //例項化D層 
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
           //進入D層,呼叫D層的SelectuUser方法,之後給user
            Login.Model.UserInfo user= uDao.SelectUser(userName, Password);
            //判斷user有無值
            if (user!=null)
            {   //有值例項化D層
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                //給D層UpateScore傳值
                sDao.UpateScore(user.ID,userName, 10);
                return user;
            }
            else
            {
                throw new Exception("登入失敗:" );
               
            }
        }

D層(UserDAO類):

 using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {   
                SqlCommand cmd = conn.CreateCommand();
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", Password));
                //查詢資料庫
                cmd.CommandText = @"SELECT ID,UserName,Password,Email
                                   FROM USERS WHERE [email protected] AND [email protected] ";
                cmd.CommandType = CommandType.Text;
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                Login.Model.UserInfo user = null;
                while (reader.Read())
                {
                    if (user==null)
                    {
                        user = new Login.Model.UserInfo();
                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);//not suggestion 
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user;
            }

D層(ScoreDAO類):

 using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));
                cmd.Parameters.Add(new SqlParameter(@"ID", ID)); 
                cmd.CommandText = @"insert INTO SCORES(ID,UserName,Score)Values(@ID,@UserName,@Score) ";
                conn.Open();
                cmd.ExecuteNonQuery();
            }

總結

在學程式設計有三層,人生的境界也有三層,看山是山,看水是水;看山不是山,看水不是水;看山還是山,看水還是水。我們學習的過程,也不過如此。如果滿足於看山是山,看水是水的階段,那麼永遠就只能是知識的容器;如果停留在看山不是山,看水不是水的階段,有人能對知識聯絡聯絡起來 ,有的會迷茫感覺困難。要想真正運用知識,就必須迴歸到看山還是山,看水還是水,看山不是山,看水不是水的源頭。當達到最高境界時啥七層,程式設計呀,都不是問題了,看多學多理解多就會了。