在实现了数据访问层的Database类之后,下面来实现业务逻辑层。本例的业务逻辑层只包含一个类Category,它代表了一个货物分类,只有一个方法LoadData(),用于根据分类的编号,获取分类的详细信息;另外具有3个属性,分别代表分类的编号、名称和说明信息。如图19.7所示。
图19.7 Category类的类图
同DataAccessLayer相似,也为业务逻辑层新建一个文件夹BusinessLogicLayer,然后在该文件夹中新建一个CS文件Category.cs,用于实现Category类,代码如下。
代码19-12 Category类实现:BusinessLogicLayer/Category.cs
1. /**********************************************************
2. * 示例:Web系统的三层体系结构之
3. * 业务逻辑层
4. *********************************************************/
5. using System;
6. using System.Data;
7.
8. using NorthWind.DataLayer;
9.
10. namespace NorthWind.BusinessLayer
11. {
12. /// <summary>
13. /// 获取种类类,一个Category对象表示一种货物种类
14. /// </summary>
15. public class Category
16. {
17. //私有成员
18. private int _categoryID; //编号
19. private string _categoryName; //名称
20. private string _description; //说明
21.
22. //属性
23. public int CategoryID
24. {
25. set{this._categoryID=value;}
26. get{return this._categoryID;}
27. }
28. public string CategoryName
29. {
30. set{this._categoryName=value;}
31. get{return this._categoryName;}
32. }
33. public string Description
34. {
35. set{this._description=value;}
36. get{return this._description;}
37. }
38.
39. //方法
40. /// <summary>
41. /// 根据参数categoryID,获取货物详细信息
42. /// </summary>
43. /// <param name="categoryID">货物种类编号</param>
44. public void LoadData(int categoryID)
45. {
46. Database db=new Database(); //实例化一个Database类
47.
48. string sql="Select * from Categories where CategoryID = "+categoryID;
49. DataSet ds=db.GetDataSet(sql);//利用Database类的GetSet方法查询数据
50.
51. //根据查询得到的数据,对私有成员赋值
52. if(ds.Tables[0].Rows.Count>0)
53. {
54. this._categoryID=Convert.ToInt32(ds.Tables[0].Rows[0] ["CategoryID"]);
55. this._categoryName=ds.Tables[0].Rows[0]["CategoryName"]. ToString();
56. this._description=ds.Tables[0].Rows[0]["Description"]. ToString();
57. }
58. }
59. }
60. }
代码实现了Category类,具体解释如下。
(1)第1~4行为文档注释。
(2)第5~6行为系统引入的.NET命名空间。
(3)第8行为系统引入的数据访问层命名空间NorthWind.DataAccess。
(4)第17~20行定义了Category类的3个私有成员,分别为货物分类的编号、名称和说明。
(5)第22~37行实现了与Category类私有成员对应的属性,3个属性均可读写。
(6)第39~59行实现了Category类的LoadData方法,该方法接受一个int型的参数categoryID,并根据这个参数获取货物分类的详细信息,把详细信息赋予私有成员。在方法实现中,第49行使用了Database类的GetDataSet方法,在本例中,因为CategoryID为Categories表的主键,那么DataSet中只可能包含一个数据表,数据表中也至多包含一行数据。
如果包含数据,那么就在第52~57行把DataSet中这唯一的一行数据中的值赋予Category类的各个成员。