还是跟着老师的课件复习吧!
一:首先说为什么要用三层结构:
三层结构的优势:
什么是三层结构
三层之间的数据传递方向:
![](https://img-blog.csdn.net/20130516143123182)
三层结构:
创建实体类:
![](https://img-blog.csdn.net/20130516145305156)
分别和这三层建立依赖关系:即在三层中分别添加引用:
![](https://img-blog.csdn.net/20130516145418754)
四:数据访问层
点击测试:通过测试后 会在数据库中显示
我刚才测试啦一下,我的没有通过测试。还有点小问题,不过方法就是上面的方法。过程是一样的
三层结构:
三层之间的关系
自上而下逐层调用
上层使用下层提供的功能
下层为上层提供服务,返回数据
不可跨层调用
不可逆向调用
二:搭建三层结构框架
搭建三层结构步骤:
创建过程:
第一:新建空白解决方案:
![](https://img-blog.csdn.net/20130516143543955)
第二:分别创建三层:
第一层:表示层MySchoolUI 添加windows窗体应用程序
![](https://img-blog.csdn.net/20130516143841371)
第二层业务逻辑层MySchoolBll和第三次数据访问层MySchoolDal
都为新建类库:
![](https://img-blog.csdn.net/20130516144106196)
最后添加三层的依赖关系:
二:搭建三层结构框架
搭建三层结构步骤:
1、搭建表示层(创建一个ASP.NET Web应用程序)
2、搭建业务逻辑层(类库)
3、搭建数据访问层(类库)
4、添加各层之间的相互依赖
创建过程:
第一:新建空白解决方案:
第二:分别创建三层:
第一层:表示层MySchoolUI 添加windows窗体应用程序
第二层业务逻辑层MySchoolBll和第三次数据访问层MySchoolDal
都为新建类库:
最后添加三层的依赖关系:
自上而下逐层调用
上层使用下层提供的功能
下层为上层提供服务,返回数据
不可跨层调用
不可逆向调用
首先在表示层:引用上添加引用
![](https://img-blog.csdn.net/20130516144450985)
再在业务逻辑层上添加:
![](https://img-blog.csdn.net/20130516144605907)
三: 三层结构的学生管理系统
实体类
因为三层结构中都要用到实体对象,所以实体类需要和这三层都建立依赖关系:
首先在表示层:引用上添加引用
再在业务逻辑层上添加:
三: 三层结构的学生管理系统
实体类
使用实体类封装数据
符合面向对象的思想
强类型
智能提示
实体类与数据库表的对应关系
表
对应
实体类
表中字段
对应
实体类的属性
![](https://img-blog.csdn.net/20130516145011787)
对应如下:
对应如下:
namespace MySchoolEntity
{
public class Student
{
public string Id;
public string Name;
public string Gender;
public string Major;
public int Grade;
public int TheClass;
}
}
创建实体类:
分别和这三层建立依赖关系:即在三层中分别添加引用:
四:数据访问层
1数据访问层与数据库打交道,实现数据增删改查操作
一般至少包含以下方法
(
方法命名供参考,下同)
添加
Insert
查询
SelectOne
,
SelectMany
更新
Update
删除
Delete
五:单元测试简介:
2数据访问层类的命名规则,在实体类名后添加一个后缀,如
Dal
或者
Db
或者
Service
等
例:
StudentDal
StudentDb
StudentService
3 实现数据访问层 StudentDal 中各个方法
在数据访问层创建StudentDal.cs类
3 实现数据访问层 StudentDal 中各个方法
首先实现
Insert
方法
在数据访问层创建StudentDal.cs类
namespace MySchoolDAL
{
public class StudentDal
{
public void insert(Student student)
{
string s = "server=.;database=SampleDb;Integrated Security=true;";
SqlConnection conn = new SqlConnection(s);
string sql = string.Format("insert into Student(Id,Name,Gender,Major,Grade,Class) values('{0}','{1}','{2}',{3},'{4}','{5}')",
student.Id, student.Name, student.Gender, student.Grade, student.TheClass);
SqlCommand cmd = new SqlCommand();
cmd.CommandText=sql;
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
测试
Insert
方法
--
单元测试
单元测试对软件开发中最小可测试单元(类和方法)进行检查和验证。
是开发人员(而非测试人员)自己进行的测试。
是编码测试,而不是人运行程序进行测试
。
首先进入第三次数据访问层:
Studnetdal.cs中的insert方法上点击右键创建测试单元:
![](https://img-blog.csdn.net/20130516150813596)
在写insert测试方法:
首先进入第三次数据访问层:
Studnetdal.cs中的insert方法上点击右键创建测试单元:
public void insertTest()
{
StudentDal target = new StudentDal();
Student student =new Student();
student.Id ="Bzu01";
student.Name="测试生成";
student.Major="CS";
student.Gender="M";
student.Grade=2011;
student.TheClass=2;
target.insert(student);
}
}
}
点击测试:通过测试后 会在数据库中显示
我刚才测试啦一下,我的没有通过测试。还有点小问题,不过方法就是上面的方法。过程是一样的