accp4.0s2-accp5.0y2转换课程理论部分教学tp8v1_第1页
accp4.0s2-accp5.0y2转换课程理论部分教学tp8v1_第2页
accp4.0s2-accp5.0y2转换课程理论部分教学tp8v1_第3页
accp4.0s2-accp5.0y2转换课程理论部分教学tp8v1_第4页
accp4.0s2-accp5.0y2转换课程理论部分教学tp8v1_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用三层结构开发数据库应用系统第八章案例展示:MySchoolPro 三层结构最终版演示:HotelManager演示回顾标识一个类可序列化的特性是什么?反射的主要应用是什么?预习检查1、三层结构划分为哪三层?2、实体类在三层结构中的主要作用是什么?3、抽象工厂的职责是什么?本章任务完成联机考试系统三层结构划分:表示层MySchool业务逻辑层MySchoolBLL数据访问层MySchoolDAL用三层结构实现不同类型用户登录升级我们的联机考试系统支持多数据库访问Access数据库访问 SqlServer数据库访问 目标使用三层结构开发项目体会到使用三层结构开发的优势使用抽象工厂设计模式为什么

2、需要三层结构服务员只管接待客人厨师只管烹炒客人要的美食采购员只管按客人需求采购肉,海鲜,蔬菜他们各负其责共同协作为客人提供美食顾客服务员厨师采购员饭店服务员厨师采购员为什么需要三层结构离职、请假其他服务员代替离职、请假离职、请假其他厨师代替其他采购员代替服务员厨师采购员为什么需要三层结构三层结构软件模型 表示层 业务逻辑层 数据访问层 软件系统 饭店 为什么需要三层结构回顾我们S1做的联机考试系统 为什么需要三层结构:登录实现部分(LoginForm类)代码结构我们从三方面对登录实现部分代码进行分析1、界面控件数据绑定实现2、逻辑判断实现3、数据库访问实现首先我们看一下界面部分的关键代码 为什

3、么需要三层结构 / 登录 private void btnLogIn_Click(object sender, EventArgs e) /. if (ValidateInput() / 调用用户验证方法 isValidUser = ValidateUser(cboLogInType.Text, txtLogInId.Text, txtLogInPwd.Text, ref message);/ 如果是合法用户,显示相应的窗体 /. 界面层实现 为什么需要三层结构 public bool ValidateUser(string loginType, string loginId, string

4、loginPwd, ref string message) int count = 0; / 数据库查询的结果 bool result = false; / 返回值,是否找到该用户 / 查询是否存在匹配的用户名和密码 if (loginType= 管理员) / 判断管理员用户 /数据访问实现代码. else if (loginType = 学员) /数据访问实现代码. return result; 逻辑判断实现用户登录实现方法 为什么需要三层结构 public bool ValidateUser(string loginType, string loginId, string loginPwd

5、, ref string message) /. / 查询是否存在匹配的用户名和密码/ 查询用sql语句 string sql = string.Format( SELECT COUNT(*) FROM Admin WHERE LogInId=0 AND LogInPwd=1, txtLogInId.Text txtLogInPwd.Text );/./ 查询用sql语句 string sql = string.Format( SELECT COUNT(*) FROM Student WHERE LogInId=0 AND LogInPwd=1,txtLogInId, txtLogInPwd)

6、; 管理员信息数据访问 用户登录实现方法 通过分析我们得到结论是? 学员信息数据访问 为什么需要三层结构1、数据库访问和用户类型判断逻辑放在一起实现2、用户界面层直接调用数据访问实现3、整个系统功能放在同一项目中实现结论是:从结论可知,我们开发的两层结构应用系统有哪些局限性? 为什么需要三层结构我们开发的两层结构有哪些局限性?难以适应需求变化不易维护安全性差为什么需要三层结构两层结构:三层结构:数据库用户界面业务逻辑数据访问两层结构软件模型数据库数据访问业务逻辑用户界面三层结构软件模型当数据库或用户界面发生改变时需要重新开发整个系统当数据库或用户界面发生改变时不需要重新开发,只做简单调整即可什

7、么是三层结构表示层 业务逻辑层 数据访问层 数 据 库为用户提供交互操作界面 负责关键业务的处理和数据传递 实现数据库访问 服务员 厨师 采购员 什么是三层结构表示层: 为用户提供一种交互式操作界面 什么是三层结构业务逻辑层是表示层与数据访问层之间的桥梁,负责数据处理、传递。 用户请求数据用户请求数据/switch (type) case 管理员: loginPwd = GetAdminLoginPwd(loginID); break; case 学员: loginPwd = GetStudentLoginPwd(loginID); break; / 什么是三层结构数据访问层数 据 库用户请求

8、数据 SQL命令实现对数据的保存和读取操作 /.conn.Open();SqlDataReader objReader = mand.ExecuteReader();if (objReader.Read() studentlist.Add(objReaderLoginPwd); studentlist.Add(objReaderUserStateId); objReader.Dispose();conn.Close();/.什么是三层结构三层之间依赖关系表示层业务逻辑层数据访问层什么是三层结构三层之间的数据传递方向业务逻辑层数据访问层表示层客户请求客户请求响应数据响应数据如何搭建三层结构如何搭

9、建表示层、业务逻辑层、数据访问层?如何实现各层之间的相互依赖?要掌握这一切,我们将整个实现过程分为以下步骤 搭建三层结构步骤1、搭建表示层(创建一个Windows应用程序)2、搭建业务逻辑层(类库)3、搭建数据访问层(类库)4、添加各层之间的相互依赖 现在我们打开VS IDE环境逐层搭建三层结构 搭建表示层2、在弹出的“新建项目“窗口中,选择Windows应用程序选择语言种类项目类型创建解决方案输入项目名称MySchool选择项目生成路径1、文件 新建 项目 :创建一个新项目搭建业务逻辑层2、在弹出的“新建项目”窗口中,选择类库选择语言种类项目类型项目名称:MySchoolBLL选择项目路径选

10、择“添入解决方案”1、文件 新建 项目 :创建一个新项目搭建数据访问层2、在弹出的“新建项目“窗口中,选择类库 选择语言种类项目类型项目名称:MySchoolDAL选择项目路径选择“添入解决方案”如何将三层中各自独立的项目产生依赖1、文件 新建 项目 :创建一个新项目 添加各层之间的相互依赖:添加表示层对业务逻辑层依赖1、右键单击“引用”选择“添加引用” 2、选择“项目”,选中“逻辑层”单击 确定 添加业务逻辑层对数据访问层的依赖与此类似完成对逻辑层的引用为什么需要实体类回顾我们第二章做的“学员信息列表”数 据 库它不具备OO的优点实现数据检索比较繁琐、易出错它使数据结构暴露在业务逻辑层和表示

11、层为了消除以上局限性我们需要使用实体类DataSet解析实体对象构建实体对象返回行集为什么需要实体类处理窗体表示层表示层后台代码业务逻辑层数据访问层数据库用户请求传递参数展示数据返回请求数据操作调用存储过程返回解析实体对象构建实体对象或集合为什么需要实体类从OOP思想考虑它是完全受控制的对象 它具有面向对象的基本特征它可以自定义行为它消除了关系数据和对象之间的差异 它为我们在关系数据库和对象之间架起一座桥梁 什么是实体类管理员数据表简单地说就是描述一个业务实体的类,例如:管理员信息 管理员信息对应的实体类三层结构中的实体类:表示层如何使用实体类 12三层结构中的实体类:业务逻辑层如何使用实体类

12、 业务逻辑层 实体对象实体对象12表示层 数据访问层 三层结构中的实体类:数据访问层如何使用实体类 数 据 库12完成本章任务的步骤1、实现业务实体层1、新增项目MySchoolModels2、添加其它项目对实体项目的引用3、添加数据表对应的实体类4、编写实体类2、设计用户界面 3、实现数据访问层4、实现业务逻辑层5、实现表示层数据绑定实现业务实体层1、在解决方案“MySchoolPro” 上单击右键选择“添加” 新建项目 选择语言种类项目类型输入项目名称MySchoolModels选择项目生成路径实现业务实体层2、在 “MySchoolModels”项目上单击右键选择“添加” 新建项 3、依

13、次添加“Admin.cs、Class.cs、Grade.cs” 类名称实现业务实体层4、编写实体类 它是业务的基础、数据传递的载体,它与其他项目的依赖关系是什么? 实体类实现业务实体层5、回顾第一章“三层之间相互依赖”的实现 6、实现三层对业务实体的依赖 表示层业务实体业务逻辑数据访问层设计用户界面 3、按需求添加所需窗体,并编辑窗体 1、在“MySchool”项目上单击右键选择“添加” 新建项 2、在“添加新项“对话框中选择”Windows 窗体” 实现数据访问层 2、在“添加新项“对话框中选择”类” 类名称如何实现高效的数据访问呢?我们需要掌握using语句的使用 新增类有:AdminSe

14、rvice.csStudentService.cs 1、在“MySchoolDAL”项目上单击右键选择“添加” 新建项 什么是using语句在C#中using语句:用于定义一个范围,在此范围末尾将释放对象 public void DeleteStudentByLoginID (string loginID) int studentID = GetStudentIDByLoginID(loginID); using (SqlConnection conn = new SqlConnection(connString) mand mand = new mand(dboOwner + .usp_De

15、leteStudent, conn); mand.CommandType = CommandType.StoredProcedure; mand.Parameters.Add(StudentID, SqlDbType.Int).Value = studentID; conn.Open(); mand.ExecuteNonQuery(); 自动释放数据库连接资源实现数据访问层:用户登录 1、在数据访问实现类中引用业务实体项目命名空间2、实例化SqlConnection对象,实现数据库连接3、实例化 mand对象,执行SQL命令4、实例化SqlDataReader对象,读取数据5、使用实体类传递信

16、息6、回顾List的使用 演示示例:用户登录 文件名称:StudentService.csAdminService.cs实现业务逻辑层 2、在“添加新项“对话框中 选择”类” 类名称新增类有:LoginManager.cs如何实现业务逻辑功能?1、在“MySchoolBLL”项目上单击右键选择“添加” 新建项 实现业务逻辑层:用户登录 1、回顾第二章的实现2、在业务逻辑处理类中引用数据访问层、业务实体层命名空间3、实例化数据访问对象4、调用数据访问功能5、实现业务逻辑处理功能 演示示例:用户登录 文件名称:LoginManager.cs 实现表示层数据绑定:用户登录 1、在窗体后台实现类中引用

17、业务逻辑层、业务实体层命名空间2、实例化业务逻辑处理对象和业务实体对象3、数据绑定4、调用业务逻辑层功能 演示示例:用户登录 窗体名称:LoginForm.cs 模式起源:同一问题的两种不同解决方案有什么相似之处 软件设计模式设计模式如同此理,它是经验的传承 。地上本没有路,走得人多了也就成了路。软件设计模式人是一个经验性动物 1、每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案下面我们回顾一下简单工厂设计模式 2、设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案3、面向对象设计模式是对在特定场景下,解决一般 设计问题中类与相互通信对象的描述为什么需要抽象工厂

18、设计模式父类产品子类产品A 子类产品B 子类产品C 工厂客户:简单工厂设计模式原理结构 什么是抽象工厂设计模式什么是抽象工厂设计模式抽象工厂 实体工厂2实体工厂1抽象产品A抽象产品B实体产品B1实体产品B2实体产品A1实体产品A2客户 :抽象工厂设计模式原理结构 什么是抽象工厂设计模式1、提供一系列相互依赖对象的创建工作2、封装对象常规的创建方法(new)3、提供统一调用数据访问方法的方式4、避免调用数据访问方法和具体对象创建工作的紧耦合什么是抽象工厂设计模型提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类 客户请求 抽象工厂抽象产品如何用抽象工厂设计模式构建我们的数据访问层?

19、 如何使用抽象工厂设计模式1、用抽象工厂生产抽象产品2、用实体工厂生产实体产品3、用抽象产品提供实体产品访问接口4、用实体产品实现自己的功能:抽象工厂设计模式中各个象的主要功能、职责应用示例:在MySchoolPro数据访问层使用抽象工厂设计模式 SQLServer实体工厂学员抽象产品抽象工厂Access实体工厂管理员抽象产品Access学员实体产品SQL Server学员实体产品客户Access管理员实体产品SQL Server管理员实体产品完成本章任务的步骤搭建数据访问层基本架构新增抽象工厂项目新增抽象产品项目实现项目间的依赖实现数据访问接口实现数据访问对象创建功能业务逻辑层调用数据访问层

20、方法实体工厂实体产品抽象产品数据访问层 抽象工厂在解决方案“MySchoolPro” 上单击右键选择“添加” 新建项目新增抽象工厂项目选择语言种类项目类型输入项目名称MySchoolDALFactory选择项目生成路径在解决方案“MySchoolPro” 上单击右键选择“添加” 新建项目新增抽象产品项目选择语言种类项目类型输入项目名称MySchoolIDAL选择项目生成路径实现项目之间的依赖MySchoolMySchoolBLLMySchoolModelsMySchoolIDALMySchoolDALFactory抽象工厂实体工厂抽象产品实体产品箭头方向从引用项目指向被引用项目MySchool

21、DAL 实现数据访问接口接口名称根据信息类别不同,分别添加不同信息的访问接口 在“MySchoolIDAL”项目上单击右键选择“添加” 新建项实现数据访问接口:使用接口提供数据访问 如何实现数据访问? 1、将相关信息的数据访问放在同一个接口中2、根据需求定义接口中的数据访问方法 演示示例:用户登录数据访问接口定义接口IStudentService.csIAdminService.cs实现接口实现数据访问接口:实现用户登录数据访问接口如何封装数据访问对象的创建? 1、将接口的实现分:Sql Server 和Access两种2、将不同的数据库访问实现放在不同的命名空间下 演示示例:实现用户登录数据

22、访问文件名称:StudentService.csAdminService.cs实现数据访问对象创建功能类名称新增抽象工厂类:AbstracterDALFactory.cs在“MySchoolDALFactory”项目上单击右键选择“添加” 新建项编码实现实现数据访问对象创建功能:在抽象工厂类中用抽象方法提供数据访问对象的创建/. public abstract IStudentService CreateStudentService(); public abstract IAdminService CreateAdminService();/.抽象工厂提供抽象产品如何选择实体工厂? /实体工厂

23、的选择应该用反射实现, 便于学员理解这里用开关语句实现 public static AbstractDALFactory ChooseFactory() string dbType = ConfigurationManager.AppSettings“DBType”.ToString(); AbstractDALFactory factory = null; switch (dbType) case Sql: factory = new SqlDALFactory(); break; case Access: factory = new AccessDALFactory(); break; return factory; 实现数据访问对象创建功能如何通过实体工厂实现数据访问对象的创建?实现数据访问对象创建功能类名称新增实体工厂类:SqlDALFactory.csAcces

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论