您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 第八章 使用Web技术搭建三层架构
第八章使用Web技术搭建三层架构2020/5/192课前回顾三层架构分为那几层?层与层之间关系引用?三层架构中每层的主要功能?2020/5/193课前回顾2-2stringsql=SELECTSubjectNameFROMSubject;SqlCommandcommand=newSqlCommand(sql,DBHelper.connection);DBHelper.connection.Open();SqlDataReaderdataReader=command.ExecuteReader();while(dataReader.Read()){cboSubject.Items.Add(dataReader[SubjectName].ToString());}未关闭ReaderdataReader.Close();未关闭连接DBHelper.connection.Close();DBHelper.connection.Dispose();2020/5/194预习检查搭建Web项目三层架构与Winfrom项目三层架构有什么不同之处?模型层有哪些内容?数据访问层一般写哪些方法?2020/5/195本章目标会在ASP.NET中使用三层结构能够实现三层结构下的用户注册和登录掌握DBHelper的用法。2020/5/196本章任务搭建网上书店的架构实现书店的用户登录2020/5/197系统架构三层结构–表示层–业务逻辑层–数据访问层分层的理念:将相似的内容放到一起去处理,开发人员可以只关注整个结构中的其中某一层,可以很容易的用新的实现来替换原有层次的实现三层结构的经典案例:PetShop2020/5/198PetShop4.0宠物商店–微软展示.NET企业开发的范例–与Sun的PetStore的商业竞争–一个小型的电子商务案例–体现了微软推广的开发思想和设计理念–分22个项目,经典的系统,从设计的思想到最好的编码,学习参考价值很高演示:PetShop4.02020/5/199PetShop4.0架构简介ASP.NETWebBLLDALFactoryOracleDALSQLServerDALIDALModel表示层业务层数据层典型的三层结构2020/5/1910搭建第三波网络书店的模型层模型层–表示层需要访问实体对象的属性值–业务层需要通过实体对象处理业务逻辑–数据层也需要通过实体对象读写数据库–模型是数据载体命名–项目名:MyBookShop.Models–命名空间:MyBookShop.Models–类名:图书表Books图书类Book–实体类通常冠以[Serializable]特性,以保证实体传输的可靠性2020/5/1911外键的处理数据库中有主外键关系,模型层怎么表示?–比如用户表和状态表–状态字段是用户表的外键两种方式:–为实体类添加状态id属性,存储状态id–为实体类添加状态属性,存储状态对象(面向对象思想)2020/5/1912示例用户类的模型–用户需要有登录名、密码、状态等属性–状态表存储状态名称–用户的状态属性使用状态对象publicUserStateUserState{get{returnthis.userState;}set{this.userState=value;}}2020/5/1913处理外键的代码[Serializable()]publicclassUser{……//字段publicUser(){}//构造函数……//常见属性publicUserStateUserState//用户状态---外键{get{returnthis.userState;}set{this.userState=value;}}}2020/5/1914本章小结1编写实体类UserRole并更新User类相关属性–类关系图如下答案:UserRole类2020/5/1915数据访问层数据访问层–所有与数据库交互的操作–数据表的增、删、查、改操作–数据访问层不做逻辑判断命名–项目名:MyBookShop.DAL–命名空间:MyBookShop.DAL–类名:图书表Books图书数据访问类BookService2020/5/1916代码比较比较两段代码代码1代码2在每一个对象的数据库访问类中:–数据库连接反复出现–数据库连接打开和关闭反复出现–执行Sql语句的方法相似–返回记录集的方法相似根据面向对象思想,是否可以减少这些重复劳动?2020/5/1917DBHelper类我们将常用方法提取出来,作为DBHelper类该类包含了:建立数据库连接属性返回单几个结果集返回DataReader返回结果DataTable返回受影响行数创建参数2020/5/1918创建数据访问层的类创建UserService类(CRUD)–Create方法–Retrieve方法––Update方法––Delete方法boolAddUser(Useruser)IListUserGetAllUsers()UserGetUserById(intid)IListUserGetUsersBySql(stringsql)boolDeleteUserById(intid)boolUpdateUser(Useruser)2020/5/1919增加一个用户的方法publicboolAddUser(Useruser){stringsql=INSERTUSERS(loginid,loginpwd,name,address,phone,mail,userroleId,UserStateId)+VALUES(@LoginId,@LoginPwd,@Name,@Address,@Phone,@Mail,@RoleId,@UserStateId);returnDBHelper.GetExecuteNonquery(sql,DBHelper.CreateParemeters((@LoginId,SqlDbType.varchar,user.LoginId),));}组合SQL语句参数赋值调用DBHelper类中的方法进行处理2020/5/1920本章小结2模型层为什么要标记为可序列化?模型层的作用?数据访问层的功能?编写User的数据访问类的查、改、删方法示例:User的数据库访问类2020/5/1921业务逻辑层业务逻辑层–是表示层与数据访问层的桥梁–负责逻辑的判断,业务处理、数据传递–不在表示层访问数据库,数据更加安全命名–项目名:MyBookShop.BLL–命名空间:MyBookShop.BLL–类名:图书表Books图书业务逻辑层类BookManager2020/5/1922用户登录的业务逻辑方法publicboolLogin(stringloginId,stringloginPwd,outUservalidUser){Useruser=newUserService().GetUserByLoginId(loginId);if(user==null){validUser=null;returnfalse;}if(user.LoginPwd==loginPwd){validUser=user;returntrue;}else{validUser=null;//密码错误returnfalse;}}2020/5/1923表示层表示层的设计给客户最直接的体验–页面风格和布局,美观大方–页面操作符合逻辑,讲究用户体验–注意风格统一表示层负责内容的展现和与用户的交互可以进行变量范围的验证不做业务逻辑判断不做与数据库交互的处理2020/5/1924用户管理模块首先根据数据库创建模型层–包括用户的实体类以及相关联的类创建数据访问层用户管理类–包括增删查改方法设计相关页面,并编写事件代码–新用户注册–用户登录–用户信息修改创建业务逻辑层处理类–根据需要,添加相关方法2020/5/1925示例1用户登录–创建页面–编写事件处理代码,包括验证输入–创建业务逻辑层方法,调用数据访问层相关方法处理演示示例:用户登录2020/5/1926用户注册的确认事件代码……Useruser=newUser();user.LoginId=this.txtLoginId.Text;……user.UserState=newUserState();user.UserState.Id=1;if(newUserManager().AddUser(user)){this.ltMain.Text=scriptalert('注册成功!请继续购物');window.location='../default.aspx'/script;}else{this.ltMain.Text=scriptalert('用户名已使用!请重新选择!')/script;}实例化User类对类相关属性进行赋值默认值,硬编码业务层进行相关判断和处理弹出脚本提示小技巧:在控件上输出脚本2020/5/1927数据库连接字符串更新第三波数据库连接配置–连接字符串存入web.config中–修改数据DBHelper文件中数据连接的设置代码–查看效果–加密解密该连接字符串演示示例7:数据库连接字符串2020/5/1928数据库连接字符串数据库连接字符串存储于configurationconnectionStringsaddname=MyBookShopconnectionString=DataSource=localhost;InitialCatalog=MyBookShop;UserID=sa;password=d@e26c#//connectionStrings....../configuration存储于configuration配置节点数据连接的名称2020/5/1929读取数据库连接读取数据库连接的方法注意事项:–使用ConfigurationManager需要引入System.Configuration类库–数据访问层的类库引用该类需要手动添加System.Configuration类库的引用stringconnectionString=ConfigurationManager.ConnectionStrings[MyBookShop].ConnectionString;数据连接的名称2020/5/1930加密和解密加密——pef解密——pdf注意事项:–程序读取加密字符串时,不需要编码解密–加密和解密在同一台计算机上使用–中文路径问题C:\...\aspnet_regiis.exe-pefconnectionStrings你的Web项目路径-provDataProtectionConfigurationProviderC:\...\aspnet_regiis.exe-pdfconnectionStrings你的Web项目路径Windows数据保护API(DPAPI)提供程序2020/5/1931本章小结3编写图书模块相关实体类和数据层、业务层的类–图书有id、作者、标题、分类、出版社、描述、ISBN(简化)–出版社有id、名称–分类有id、名称–编写图书、出版社、分类的实体类–编写图书的数据层增删查改方法–编写图书业务层的查询所有的方法演示示例:图书模块相关类2020/5/1932本章总结数据访问层常见的方法有哪几种?页面要显示一个表的内容,可否直接使用ADO.NET连接数据库,为什么?业务逻辑层的方法来自哪部分的需求?2020/5/1933本章作业理论作业–XXXXXXXXX上机作业–XXXXXXXXXXXXXXXXX2020/5/1934
本文标题:第八章 使用Web技术搭建三层架构
链接地址:https://www.777doc.com/doc-5450198 .html