◇三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用划分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
區分層次的目的即為了“高內聚低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。 (以上來自百度百科“三層架構”)
◇我個人的理解是,每一層都實現自己的功能,然后相互調用,最后使得代碼更加方便的管理。
◇例如:我們可以把對數據庫的操作代碼(例如一些select 或者insert語句寫在DAL層的一個方法中,然后在調用它們)。接下來我就來詳細分析這個例子:
①前提說明:數據庫中有一張表,有三個字段。然后我們新建一個名為DALWindow的窗口,放上來個Button控件,一個叫做insert,一個叫做selcect,如下圖:
②為了方便進行獲取以及賦值,我們需要申請一個定義Person類:
class Person { public string Name { get; set; } public int? Age { get; set; } public int Height { get; set; } }
◇注意這個的int?類型,應該與數據庫中的可控字段對應。
③然后新建一個名為DAL.cs的類作為數據訪問層:
一、這里先寫下插入數據的數據訪問層的代碼:
public static object ToDBValue(object value) { if (value == null) { return DBNull.Value; } else { return value; } } public static int DALInsert(Person person) { int i = SqlHelper.ExecuteNonQuery("Insert into T_Person values (@name,@age,@height)", new SqlParameter("@name",ToDBValue(person.Name)), new SqlParameter("@age",ToDBValue(person.Age)), new SqlParameter("@height",person.Height)); return i; }
◇其中,ToDBValue()方法是用來處理把我們要插入的null類型轉換成數據庫中可識別的NULL類型的。
然后在insert的Click事件中調用這個靜態方法:
private void button1_Click(object sender, RoutedEventArgs e) { Person p1 = new Person(); p1.Height = 1800; int i= DAL.DALInsert(p1); MessageBox.Show("成功插入"+i.ToString()+"條數據"); }
◇大家可以看出,這時候在這個Click事件中,代碼就顯得格外簡單,而且沒有任何關於數據庫的插入語句以及一些ADO.NET對象。直觀明了。
二、然后再來寫查詢數據的數據訪問層的代碼:
public static object FromDBValue(object value) { if (value == DBNull.Value) { return value = null; } else { return value; } } public static Person DALSelectByHeight(int height) { Person person = new Person(); DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Person where Height = @height", new SqlParameter("@height",height)); if (dt.Rows.Count == 1) { foreach (DataRow dr in dt.Rows) { person.Age = (int?)FromDBValue(dr["Age"]); person.Name = (string)FromDBValue(dr["Name"]); person.Height = (int)FromDBValue(dr["Height"]); } return person; } else { person.Name = "000"; person.Height = 000; person.Age = 000; return person; } }
◇FromDBValue方法是用來判斷和獲取數據庫中的NULL類型以轉化成代碼可識別的null類型。
然后就是select按鈕的Click事件:
private void button2_Click(object sender, RoutedEventArgs e) { Person p1 = DAL.DALSelectByHeight(123); MessageBox.Show(p1.Age.ToString()); }
◇這樣就完成了,查詢和插入數據的DAL分層編寫。
◇在很小的項目中,看似步驟很麻煩,效率很低。但是在大的項目中,這是必須這樣做的,才能准確的修改查看代碼。