第4章:三层架构


本章任务

  1. 完善新增学生的功能
  2. 实现删除学生的功能

本章目标

  1. 理解什么是三层架构

  2. 能够搭建三层架构

  3. 能够在三层架构下编码会

  4. 使用ADO.NET事务处理

本章内容

三层架构的必要性

问题1:如果增加密码加密的功能,加密的代码放在 表示层还是数据访问层?

问题2:企业审批中不断变化的流程,反复修改整个解决方案。

三层架构中的业务层

实体类在三层中的数据传递

搭建三层架构的步骤

1、创建数据访问层项目

2、创建业务逻辑层项目

3、创建表示层项目

4、创建实体类项目

5、分别添加三层对实体类项目的依赖

6、添加业务逻辑层对数据访问层的依赖

7、添加表示层对业务逻辑层的依赖

业务逻辑层中的编码

  • 创建业务逻辑类
  • 引用数据访问层、业务实体层命名空间
  • 实现业务逻辑方法
    • 调用数据访问层中的方法
    • 实现业务处理代码

表示层中的编码

  • 创建WinForms 窗体
  • 引用业务逻辑层、业务实体层命名空间
  • 实现表示层的方法
    • 调用业务逻辑层中的方法
    • 实现显示逻辑代码

三层架构的扩展-通用层

通用(Common)层用来复用一些软件系统中共用的技术.

例如:

通用的辅助类和工具方法 数据校验方法缓存处理 加密处理

分层架构小结

优势

  • 分离开发人员的关注
  • 无损替换
  • 提高代码的可复用性

缺点

  • 代码量大,实现复杂

ADO.NET 的事务处理

ADO.NET 通过 SqlTransaction 对象执行事务处理

使用ADO.NET事务的步骤

  1. 创建一个SqlTransaction对象,标志事务开始
  2. 将SqlTransaction 对象分配给SqlCommand 的 Transaction 属性
  3. 调用相应的方法执行SqlCommand命令
  4. 调用 SqlTransaction 的 Commit() 方法完成事务/调用 Rollback() 方法终止事务

使用ADO,NET事务

本章总结

  • 三层架构及各层间的依赖关系
  • ADO.NET中使用事务的两种方式
    • 使用ADO.NET事务处理
    • 调用事务处理的存储过程
  • 使用SqlTransaction 执行事务的步骤

课后作业

1.将 MySchool 改成三层架构

  • 将 MySchool 改成三层架构,并正确添加依赖

2.新增学生的业务处理

  • 判断学号是否存在,如果存在,则不允许添加
  • 判断身份证号是否存在,如果存在,则不允许添加
  • 给学生登录的密码加密
  • 实现思路:
    • 数据访问层:添加方法判断学号、身份证号是否存在
    • 通用层:添加MD5加密类,实现加密算法
    • 业务逻辑层:调用数据访问层方法判断学员信息存在性,调用加密算法给学员密码加密
    • 表示层:添加对业务逻辑层方法的调用

3.编制学生准考证号

  • 实现生成准考证号的功能
  • 准考证号的生成规则
    • 月份+日期+年级号+科目号+随机数(1-1000)
  • 随机数不满三位从左边起以0补齐
  • 其它不满二位从左边起以0补齐
  • 将生成的准考证号显示在列表中

4.使用事务删除学生记录

  • 使用ADO.NET 事务删除学生记录
  • 首先删除学生成绩,然后删除学生记录
  • 如果任何一步操作失败,自动回滚

5.调用存储过程事务删除学生记录

  • 使用ADO.NET 调用存储过程删除学生记录
  • 在存储过程中使用事务处理语句
  • 首先删除学生成绩,然后删除学生记录
  • 如果任何一步操作失败,自动回滚