《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH
6.4 类总体设计(迭代1)
实体类、数据访问层类、业务逻辑层类、表示层窗口类的初步设计如表3。 表3 实体类、数据访问层、业务逻辑层的类设计 层 实体类模块 (Model) 类名 ReaderType Reader Book Borrow 数据访问层 (DAL) ReaderTypeDAL ReaderDAL BookDAL BorrowDAL SQLHelper 业务逻辑层 (BLL) ReaderTypeAdmin ReaderAdmin BookAdmin BorrowAdmin UserAdmin 表示层 (UI) frmLogin frmMain frmReader … 说明 读者类型实体类 读者实体类 图书实体类 借阅记录实体类 读者类型数据表访问类(插、删、改、查、存储过程等) 读者数据表访问类(插、删、改、查、存储过程等) 图书数据表访问类(插、删、改、查、存储过程等) 借阅数据表访问类(插、删、改、查、存储过程等) 微软提供的对SQL Server数据库进行访问的通用类 读者类型管理类,实现插、删、改、查等信息维护操作。 读者管理类,实现借书证办理、变更、补办、挂失、解除挂失、注销等用例中的各种系统操作。 图书管理类,实现图书管理各用例中的系统操作 借阅管理类,实现借书、还书、续借等用例中的系统操作。 用户管理类, 登录窗口类 程序主窗口类,含菜单、工具栏、状态栏等 读者管理窗口类 6.5 Model层实体类设计
在BookManage.Model项目中添加4个实体类:ReaderType、Reader、Book、Borrow,分别对应4个数据库表。实体类的属性与数据库表结构保持一致(名称、类型);实体类应尽量简单,除了实体对象的复制与比较等方法外,不宜添加过多方法。
其实实体类就是实现ORM。
ORM Object Relational Mapping 对象关系映射,是为了解决面向对象的类,与关系数据库的表之间,存在的不匹配的现象,通过使用描述对象和关系之间映射的元数据,在程序中的类对象,与关系数据库的表之间建立持久的关系,用于在程序中描述数据库表。本质上就是将数据从一种形式转换到另外一种形式。
ORM是一个广义的概念,适应于关系数据库与应用程序之间的各类数据转换,目前有许多自动转换工具可用,如codesmith 等,也可手工书写实体类代码来实现ORM。 1. ReaderType
类
在Model项目中添加新建项:C#代码类ReaderType.cs,如图7所示。
17 / 47
《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH
图7 添加C#代码类文件ReaderType.cs
表字段映射为实体类属性的基本方法(VS 2005及以上版本)如下:
private string _rdTypeName; public string rdTypeName {
get { return _rdTypeName; } set { _rdTypeName = value; }
}
而在VS 2008及以上版本中可简化为:
public string rdTypeName { get; set; }
表4 SQL字段类型与实体类属性类型的映射关系 SQL Server字段类型 nchar, nvarchar, text int, smallint numeric(12,0) datetime Float, money bit image DataTable中类型 System.String System.Int32, System.Int16 System.Decimal System.DateTime C#实体类设计属性 string int long DateTime System.Single, System.Decimal float System.Boolean System.Byte[] bool Byte[] 在VS 2008及以上版本中ReaderType类的实现代码如下: 18 / 47
《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH
在VS 2005(含2008及以上版本)中ReaderType类的实现代码如下:
19 / 47
《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH
另外,可添加复制构造函数,如下:
public ReaderType(ReaderType rt) {
this.rdType = rt.rdType;
this.rdTypeName = rt.rdTypeName; this.CanLendQty = rt.CanLendQty; this.CanLendDay = rt.CanLendDay;
this.CanContinueTimes = rt.CanContinueTimes; this.PunishRate = rt.PunishRate; this.DateValid = rt.DateValid; }
2. Reader3. Book
类(略)
类(略) 类(略)
4. Borrow
6.6 DAL层类设计
除SqlHelper外,每个数据库表对应一个DAL层类,主要实现该表的插删改查操作。 1. SqlHelper
类
20 / 47
在BookManage.DAL项目中添加SqlHelper.cs文件,该类是微软SqlHelper类(参见文件“参