黑馬程序員_學習日記54_626三層項目(三層案例)

1、寫三層的基本步驟:(以登錄練習爲例)

1.1根據功能分析Sql語句

由於要求要判斷用戶名是否存在,並且登錄成功後要記錄當前用戶的真實姓名、主鍵Id,所以這時考慮sql語句不能是:select count(*)...,應該是下面這條:

select * from T_Seats where CC_LoginId=@uid

1.2根據sql語句編寫數據訪問層

1.3編寫業務邏輯層BLL(業務邏輯層中的方法的參數與返回值由表現層(調用者)來決定)

1.4編寫表現層,在表現層調用業務邏輯層

 

2、TSeatsBll、TSeatDal 爲什麼不寫成靜態的?

這些業務邏輯層類、數據訪問層類沒有寫成靜態的,是爲了以後實現多態

 

3、三層實現增刪改查

3.1結構

DAL:SqlHelper.cs+PersonDal.cs

+

BLL:PersonBll.cs

+

UI:Form1.cs+App.config

+

Model:Person.cs

3.2具體問題

3.2.1Load時讀取整張表應該用List<Person>作爲返回值,而不是DataTable;List<Person>用DataReader讀取;Person變量應該聲明在循環內。具體實現爲

 public List<Person> LoadTable()

{

    string sql = "select uName,age,height,gender from TblPerson";

    List<Person> listPerson = new List<Person>();

    using (SqlDataReader reader = SqlHelper.ExecuteReader(constr,CommandType.Text,sql))

    {

       if (reader.HasRows)

       {

           while (reader.Read())

           {

              //應該在循環內部聲明Person變量,才能實例化多個對象,不然加載到List上爲多個相同的Person

              Person person = new Person();

              person.UName = reader.GetString(0);

              person.Age = reader.GetInt32(1);

              person.Height = reader.IsDBNull(2) ? null : (int?)reader.GetInt32(2);

              person.Gender = reader.IsDBNull(3) ? null : (object)reader.GetBoolean(3);

              listPerson.Add(person);

           }

       }

    } 

    return listPerson;

}

3.2.2Insert方法需要返回自動編號用output inserted.autoId。用ExecuteScalar返回

3.2.3Person類的Gender屬性用object類型,方便實現在UI層由bool類型向string類型的轉換

 

4、三層實現登錄、修改密碼

4.1結構

DAL:SqlHelper.cs+SeatsDal.cs

+

BLL:CommonHelper.cs(封裝MD5算法)+SeatsBll.cs

+

UI:App.config+GlobalHelper.cs(保存需要在窗口間傳遞的靜態字段)+LoginForm.cs+RegisterForm.cs

+

Model:SeatModel.cs(存放座席信息)

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