C三层架构简单实例分析

上传人:宝路 文档编号:2983048 上传时间:2017-07-29 格式:DOC 页数:18 大小:571.51KB
返回 下载 相关 举报
C三层架构简单实例分析_第1页
第1页 / 共18页
C三层架构简单实例分析_第2页
第2页 / 共18页
C三层架构简单实例分析_第3页
第3页 / 共18页
C三层架构简单实例分析_第4页
第4页 / 共18页
C三层架构简单实例分析_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《C三层架构简单实例分析》由会员分享,可在线阅读,更多相关《C三层架构简单实例分析(18页珍藏版)》请在金锄头文库上搜索。

1、基于 3 层架构的课程管理系统本模块工作任务 任务 3-1:三层架构划分 任务 3-2:数据访问层的实现 任务 3-3:业务逻辑层的实现 任务 3-4:表示层的实现本模块学习目标 1、掌握三层架构的划分原理 2、掌握各层的设计思路,和层之间的调用关系 3、利用三层架构实现对课程管理模块的重构 4、巩固 OOP 的基本概念和 OOP 的编程思路-http:/211.147.15.119/mmdy.html任务 3-1:三层架构划分 效果与描述图 3.1 包含多个项目的 3 层架构解决方案本任务要求学生能够将原来的只有 1 个项目的课程管理模块,重构为标准的具有 5 个项目的 3 层架构的模块,并

2、进行恰当的初始化,仍能实现课程记录的添加、浏览功能。在此过程中理解 3 层架构的划分原理,各层的任务,层之间的调用关系。本任务的业务流程:将原项目改为 U I 层新建 B L L / D A L / C O M M O N / M O D L 项目并初始化 初始化后仍能实现课程记录的浏览和添加业务逻辑层数据访问层界面层图 3.2 单层转化为 3 层架构的业务流程 相关知识与技能3-1-1 三层架构的划分原理三层架构的划分如下图:图 3.3 三层架构原理图1、 各层的任务数据访问层:使用 ADO.NET 中的数据操作类,为数据库中的每个表,设计 1 个数据访问类。类中实现:记录的插入、删除、单条

3、记录的查询、记录集的查询、单条记录的有无判断等基本的数据操作方法。对于一般的管理信息软件,此层的设计是类似的,包含的方法也基本相同。此层的任务是:封装每个数据表的基本记录操作,为实现业务逻辑提供数据库访问基础。业务逻辑层:为用户的每个功能模块,设计 1 个业务逻辑类,此时,需要利用相关的数据访问层类中,记录操作方法的特定集合,来实现每个逻辑功能。界面层:根据用户的具体需求,为每个功能模块,部署输入控件、操作控件和输出控件,并调用业务逻辑层中类的方法实现功能。2、 层之间的调用关系数据访问层的类,直接访问数据库,实现基本记录操作。业务逻辑层的类,调用相关的数据访问类,实现用户所需功能。界面层:部

4、署控件后,调用业务逻辑层的类,实现功能。将应用程序的功能分层后,对于固定的 DBMS,数据访问层基本可以不变,一旦用户的需求改变,首先修改业务逻辑层,界面层稍做改动即可。这种做法使程序的可复用性、可修改性,都得到了很好的改善,大大提高了软件工程的效率。3-1-2 ORM(对象关系映射)在图 3.1 中看到,除了界面层、业务逻辑层和数据访问层之外,还有 2 个项目。其中,Common 项目中一般放的是公用文件,如数据操作类 DBHelper 等,被数据访问层的类调用,其必要性在上个模块已述。Modal 项目中存放的是实体类。所谓的对象关系映射 Object Relational Mapping,

5、简称 ORM,是为了解决面向对象的类,与关系数据库的表之间,存在的不匹配的现象,通过使用描述对象和关系之间映射的元数据,在程序中的类对象,与关系数据库的表之间建立持久的关系,用于在程序中描述数据库表。本质上就是将数据从一种形式转换到另外一种形式。ORM 是一个广义的概念,适应于关系数据库与应用程序之间的各类数据转换,目前有许多自动转换工具可用,如 codesmith 等。在本教材中,利用手工书写代码的形式,实现ORM。如对于学生选课管理系统数据库中的课程表 course,其设计视图如下:图 3.4 Course 表设计视图可以这样设计类来描述它:public class Coursepriva

6、te string courseId;public string CourseIdget return courseId; set courseId = value; private string courseName;public string CourseNameget return courseName; set courseName = value; private int courseCredit;public int CourseCreditget return courseCredit; set courseCredit = value; public Course() publ

7、ic Course(string courseId,string courseName,int courseCredit)this.courseId = courseId;this.courseName = courseName;this.courseCredit = courseCredit;将表中的每个字段抽取为类的字段(注意类型匹配) ,并封装成属性,设计构造函数,来将表抽取为类。这种类就称为实体类。这个抽取过程称为对象关系映射 ORM。在 Modal 项目中,为数据库的每个表,都设计一个相应的实体类,这样,就相当于对每个表实体,在.NET 程序中,都可以通过类对象来应用。在上面介绍的

8、3 层中,通常都会用到实体类对象。综上所述,这 5 个项目之间的关系是这样的:U I ( 界面层 )C o m m o n ( D B H e l p e r 数据操作类 )D A L ( 数据访问层 )B L L ( 业务逻辑层 )M o d a l ( 实体类 )数据库图 3.5 三层架构中 5 个项目之间的关系图 任务的设计思路1、在上个模块基于单层的课程管理的基础上,将原有的 WINDOWS 窗体应用程序的项目,设置为界面层,改名为 UI,界面层的控件部署不用改变,并设置为启动项目;2、在解决方案中添加业务逻辑层项目 BLL、数据访问层项目 DAL、Common 项目、Modal 项目

9、,他们都是类库型的项目;3、将 DBHelepr 类移到 Common 项目中;4、在 Modal 项目中,为学生选课管理系统的每个表,设计对应的实体类。5、设置好引用关系后,运行,可实现课程记录的添加和浏览。注意:此时,3 层结构虽已架设好,运行也可实现课程管理的记录添加和浏览功能。但是运行的仍是界面层代码,其余层的代码尚未设计。 任务的实施1、在原来的版本中,用 1 个 WINDOWS 窗体应用项目就实现了课程管理,在 3 层架构体系中,当然,这个项目就是界面层。首先,把原有的项目改名为 UI,右击此项目,改名即可。然后,右击解决方案,选择“设置启动项目” ,即可将界面层项目设置为启动项目

10、。2、右击解决方案,分别生成 4 个新的项目,这些项目均是类库项目,按照惯例,数据访问层项目起名为 DAL,业务逻辑层项目起名为 BLL, 另外 2 个项目起名为 Common 和Modal。3、右击Common,选择“添加”里的“现有项” ,将DBHelper类添加入此项目。右击UI下原有的 DBHelper类文件,选择“从项目中排除” 。就实现了将DBHelepr类移到Common项目中。将命名空间改为BFCourse.Common,其中BFCourse为解决方案名。以后每个项目中的每个文件,都需要在前面加上解决方案名,这样,就都处于同一个命名空间BFCourse。4、在 Modal 项目

11、中,选择添加新建项,参考课程表的抽取方法,为学生选课管理系统的每个表,设计对应的实体类。同理,命名空间改为 BFCourse. Modal。5、此时,界面层代码会显示 DBHelper 找不到,因为移到了 Common 项目。所以,必须在界面层项目 UI 中添加对 Common 项目的引用。然后,整个系统就可以运行了。当然,虽然形式是 3 层的,但实际运行的是 UI 和 Common 中的代码。 举一反三1、把选课系统数据库的另外 3 张表,学生表、选课表和用户表,都进行对象关系映射,为其生成实体类。2、在包含 5 个项目的 3 层架构的系统中,为 DAL、BLL 项目添加类文件,只需添加空文

12、件,但命名方式按各层的功能需求设计,将所有需要的类文件添加齐全。-任务 3-2:课程添加的 3 层实现 效果与描述效果图仍然如图 2.1 所示,实现课程记录的添加。但需要用 3 层的技术来实现。首先,回顾一下,记录添加的业务流程,如图 2.14 所示。要判断输入的完整性;然后判断输入的课程号主键在数据库中是否已有;若无,则插入记录到数据库中。然后,根据业务需求,从底到高来设计每层。单纯的判断记录有无、单纯的记录添加操作,就可以放在数据访问层。记录添加的逻辑功能:判断输入的课程号主键在数据库中是否已有,若无,则插入记录到数据库中,则由业务逻辑层调用数据访问层的添加方法来实现;最后,在界面层,其控

13、件部署不用改变,只需判断文本框的输入完整性,然后调用业务逻辑层的添加方法就可以了。本任务的设计流程如下:设计数据访问类 C o u r s e A c c e s s 的E x i s t 和 A d d C o u r s e 方法设计业务逻辑类 C o u r s e B i z 类的A d d c o u r s e 方法利用业务逻辑层优化界面层相关代码图 3.6 数据添加的 3 层设计流程 相关知识与技能3-2-1 数据访问层的方法设计一般为系统数据库中的每个表设计一个数据访问类,实现基本的记录操作。为了实现课程记录的添加,目前,可在数据访问类包含如下方法:1、 判断某主键的记录是否存

14、在方法名:Exist形参:代表主键的变量返回值:bool方法内代码设计:(1) 设计语句 select * from 表 where 主键名=形参(2) 利用 using 语句,调用 DBHelper 类,生成一个 datareader 对象(3) 利用 HasRows 属性判断此 datareader 对象是否有行,若有,返回真,否则返回假。应用场合:在插入记录前判断,若有则不用再插;在删除记录前判断,若有则不能删。2、方法名:AddXX形参:代表此表实体类的对象返回值:int方法内代码设计:(1) 设计语句 insert(2) 调用 DBHelper 类,用 ExeccuteNonQuer

15、y()方法执行此语句并返回。应用场合:在表中添加一条记录,根据返回值是否大于 0 判断执行成功否。3-2-2 业务逻辑层的方法设计一般为系统中的每个功能模块设计1个业务逻辑层的类,实现此模块的所有业务逻辑。在课程添加中,所需要的业务逻辑为课程添加。首先,由于需要调用数据访问类CourseAccess,因此,在类内设计1个字段为此类对象:CourseAccess courseAccess = new CourseAccess();其次,此类需要设计如下方法:1、 添加课程方法名:AddXX形参:课程类对象返回值:void方法内代码设计:(1) 调用 CourseAccess 类对象的 Exist()方法,判断形参所表示的课程类对象是否存在,若存在方法返回;(2) 调用 CourseAccess 类对象的 AddCourse()方法,添加课程,并利用返回值判断添加是否成功。3-2-3 界面层的设计界面层的设计,首先需要根据用户的功能需求部署恰当控件,这些控件部署在第 2 模块已实现,不用改变。然后,把功能实现代码放在恰

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号