◇三层架构(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分层编写。
◇在很小的项目中,看似步骤很麻烦,效率很低。但是在大的项目中,这是必须这样做的,才能准确的修改查看代码。