版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、模块概述 1本模块工作任务 2本模块学习目标 2任务 3-1 :三层架构划分 2 效果与描述 2 相关知识与技能 23-1-1 三层架构的划分原理 23-1-2 ORM (对象关系映射)3 任务的设计思路 4 任务的实施 4 举一反三 4任务 3-2:数据访问层 5效果与描述 5 相关知识与技能 53-2-1 泛型集合的定义与使用113-2-2 数据访问层的设计思路5任务的设计思路 错误!未定义书签。 任务的实施 6 举一反三 8任务 3-3:业务逻辑层的实现8效果与描述 8 相关知识与技能 93-3-1 业务逻辑层的设计思路 9 任务的设计思路 错误!未定义书签。 任务的实施 错误!未定义书
2、签。 举一反三 14任务 3-4:表示层的实现 错误!未定义书签。 效果与描述 错误!未定义书签。 相关知识与技能 错误!未定义书签。3-4-1 界面层的设计思路 错误!未定义书签。 任务的设计思路 错误!未定义书签。 任务的实施 错误!未定义书签。 举一反三 错误!未定义书签。本模块小结 14本模块作业 15模块三 基于3层架构的课程管理模块概述在上个模块:单层的课程管理中,已实现数据库的连接、命令的执行、不同数据集的 应用,并利用应用程序配置文件,和自定义的数据操作类,对程序进行了优化重构。实现 一个管理信息系统所需要的技术,似乎已全了。 但是,如果应用程序的功能需求不是这么简单,而是有非
3、常复杂的流程。那么,如果按照上个模块的做法,在最后的重构中设计了一些功能实现方法,并且在同一层调用,界面层 的代码就会很长而无序。并且,一旦用户需求改变,则对这么长的代码进行重写,是不可 行的。这种做法对于大型的软件是不能承受的。因此,目前通用的做法是:将应用程序的实现分布在从底向高的三个层。数据访问层实现 对数据库记录的操作,这对于特定DBMS 是固定的,不需更改的;业务逻辑层利用数据访问层实现业务逻辑,这层是关键,如果用户的业务需求改了,可以在这层中修改,因为这 层有很多独立的方法,而且,改某个功能不会影响到别的功能,这种改动就比较科学;界 面层调用业务逻辑层实现用户的功能,只要业务逻辑层
4、有这个功能,就可以调用,界面层 只需提供输入输出和提示等。这就是基于3 层架构的应用程序体系结构,是目前最通用的架构模式。本模块工作任务任务 3-1:三层架构划分任务 3-2:数据访问层的实现任务 3-3:业务逻辑层的实现任务 3-4:表示层的实现本模块学习目标1、掌握三层架构的划分原理2、掌握各层的设计思路,和层之间的调用关系3、利用三层架构实现对课程管理模块的重构4、巩固 OOP 的基本概念和 OOP 的编程思路任务3-1:三层架构划分效果与描述图 3.1 包含多个工程的 3 层架构解决方案本任务要求学生能够将原来的只有 1 个工程的课程管理模块,重构为 工程的 3 层架构的模块,并进行恰
5、当的初始化,仍能实现课程记录的添加、 浏 此过程中理解3层架构的划分原理,各层的任务,本任务的业务流程:图 3.2 单层转化为3层架构的业务流 相关知识与技能3-1-1 三层架构的划分原理 三层架构的划分如下图:图 3.3 三层架构原理图1、各层的任务数据访问层:使用 ADO.NET 中的数据操作类,为数据库中的每个表,设计 1 个数据访 问类。类中实现:记录的插入、删除、单条记录的查询、记录集的查询、单条记录的有无 判断等基本的数据操作方法。对于一般的管理信息软件,此层的设计是类似的,包含的方 法也基本相同。此层的任务是:封装每个数据表的基本记录操作,为实现业务逻辑提供数 据库访问基础。业务
6、逻辑层:为用户的每个功能模块,设计1 个业务逻辑类,此时,需要利用相关的5 个t 间的调系业务逻辑层数据访问层数据访问层类中,记录操作方法的特定集合,来实现每个逻辑功能。界面层:根据用户的具体需求,为每个功能模块,部署输入控件、操作控件和输出控 件,并调用业务逻辑层中类的方法实现功能。2、 层之间的调用关系 数据访问层的类,直接访问数据库,实现基本记录操作。 业务逻辑层的类,调用相关的数据访问类,实现用户所需功能。 界面层:部署控件后,调用业务逻辑层的类,实现功能。将应用程序的功能分层后,对于固定的DBMS,数据访问层基本可以不变,一旦用户的需求改变,首先修改业务逻辑层,界面层稍做改动即可。这
7、种做法使程序的可复用性、 可修改性,都得到了很好的改善,大大提高了软件工程的效率。3-1-2 ORM (对象关系映射)在图 3.1 中看到,除了界面层、业务逻辑层和数据访问层之外,还有2 个工程。其中, Common 工程中一般放的是公用文件,如数据操作类 DBHelper 等,被数据访问层的类 调用,其必要性在上个模块已述。 Modal 工程中存放的是实体类。所谓的对象关系映射Object Relational Mapping,简称 ORM,是为了解决面向对象的类,与关系数据库的表之间,存在的不匹配的现象,通过使用描述对象和关系之间映射的 元数据,在程序中的类对象,与关系数据库的表之间建立持
8、久的关系,用于在程序中描述 数据库表。本质上就是将数据从一种形式转换到另外一种形式。ORM 是一个广义的概念,适应于关系数据库与应用程序之间的各类数据转换,目前有 许多自动转换工具可用,如 codesmith 等。在本教材中,利用手工书写代码的形式,实现 ORM。如对于学生选课管理系统数据库中的课程表course,其设计视图如下:图 3.4 Course 表设计视图 可以这样设计类来描述它:publicclass Course privatestring courseId。publicstring CourseIdget return courseId。 set courseId = valu
9、e。 privatestringcourseName。publicstring CourseName get return courseName。 set courseName = value。 privateint courseCredit。publicint CourseCreditget return courseCredit。 set courseCredit = value。public Course() public Course( string courseId, string courseName, int courseCredit)this .courseId = cours
10、eId。this .courseName = courseName。this .courseCredit = courseCredit。将表中的每个字段抽取为类的字段(注意类型匹配),并封装成属性,设计构造函 数,来将表抽取为类。这种类就称为实体类。这个抽取过程称为对象关系映射ORM。在 Modal 工程中,为数据库的每个表,都设计一个相应的实体类,这样,就相当于对 每个表实体,在 .NET 程序中,都可以通过类对象来应用。在上面介绍的3 层中,通常都会用到实体类对象。综上所述,这 5 个工程之间的关系是这样的:图 3.5 三层架构中 5 个工程之间的关系图 任务的设计思路1、在上个模块基于单
11、层的课程管理的基础上,将原有的WINDOWS 窗体应用程序的工程,设置为界面层,改名为UI,界面层的控件部署不用改变,并设置为启动工程;2、 在解决方案中添加业务逻辑层工程BLL 数据访问层工程DAL、Common 工程、Modal 工程,他们都是类库型的工程;3、将 DBHelepr 类移到 Common 工程中;4、在 Modal 工程中,为学生选课管理系统的每个表,设计对应的实体类。5、设置好引用关系后,运行,可实现课程记录的添加和浏览。注意:此时, 3 层结构虽已架设好,运行也可实现课程管理的记录添加和浏览功能。 但是运行的仍是界面层代码,其余层的代码尚未设计。任务的实施1、 在原来的
12、版本中,用 1 个 WINDOWS 窗体应用工程就实现了课程管理,在3 层架构体系中,当然,这个工程就是界面层。首先,把原有的工程改名为UI,右击此工程,改名即可。然后,右击解决方案,选择“设置启动工程”,即可将界面层工程设置为启动工程。2、 右击解决方案,分别生成4 个新的工程,这些工程均是类库工程,按照惯例,数据访问层工程起名为 DAL,业务逻辑层工程起名为BLL,另外 2 个工程起名为 Common 和Modal。3、 右击 Common,选择添加”里的现有项”,将DBHelpe 啖添加入此工程。右击UI 下原有的 DBHelper 类文件,选择从工程中排除”。就实现了将DBHelep
13、啖移到 Common工程中。将命名空间改为 BFCourse.Common,其中 BFCourse 为解决方案名。以后每个工程中 的每个文件,都需要在前面加上解决方案名,这样,就都处于同一个命名空间BFCourse。4、在 Modal 工程中,选择添加新建项,参考课程表的抽取方法,为学生选课管理系 统的每个表,设计对应的实体类。同理,命名空间改为 BFCourse.Modal。5、 此时,界面层代码会显示 DBHelper 找不到,因为移到了 Common 工程。所以,必 须在界面层工程 UI 中添加对 Common 工程的引用。然后,整个系统就可以运行了。当 然,虽然形式是 3 层的,但实际
14、运行的是 UI 和 Common 中的代码。举一反三1、把选课系统数据库的另外3 张表,学生表、选课表和用户表,都进行对象关系映射,为其生成实体类。2、在包含 5 个工程的 3 层架构的系统中,为 DAL、BLL 工程添加类文件,只需添加空 文件,但命名方式按各层的功能需求设计,将所有需要的类文件添加齐全。任务3-2:课程添加的3层实现效果与描述效果图仍然如图 2.1 所示,实现课程记录的添加。但需要用3 层的技术来实现。首先,回顾一下,记录添加的业务流程,如图 2.14 所示。要判断输入的完整性;然后 判断输入的课程号主键在数据库中是否已有;若无,则插入记录到数据库中。然后,根据业务需求,从
15、底到高来设计每层。单纯的判断记录有无、单纯的记录添加 操作,就可以放在数据访问层。记录添加的逻辑功能:判断输入的课程号主键在数据库中 是否已有,若无,则插入记录到数据库中,则由业务逻辑层调用数据访问层的添加方法来 实现;最后,在界面层,其控件部署不用改变,只需判断文本框的输入完整性,然后调用 业务逻辑层的添加方法就可以了。本任务的设计流程如下 :图 3.6 数据添加的 3 层设计流程 相关知识与技能3-2-1 数据访问层的方法设计 一般为系统数据库中的每个表设计一个数据访问类,实现基本的记录操作。为了实 现课程记录的添加,目前,可在数据访问类包含如下方法:1、 判断某主键的记录是否存在 方法名
16、: Exist 形参:代表主键的变量 返回值: bool 方法内代码设计:( 1) 设计语句 select * from 表 where 主键名 =形参( 2) 利用 using 语句,调用 DBHelper 类,生成一个 datareader 对象( 3) 利用 HasRows 属性判断此 datareader 对象是否有行,若有,返回真,否则 返回假。应用场合:在插入记录前判断,若有则不用再插;在删除记录前判断,若有则不 能删。2、方法名: AddXX 形参:代表此表实体类的对象 返回值: int 方法内代码设计: ( 1) 设计语句 insert(2) 调用 DBHelper 类,用 E
17、xeccuteNonQuery ()方法执行此语句并返回。 应用场合:在表中添加一条记录,根据返回值是否大于 0 判断执行成功否。3-2-2 业务逻辑层的方法设计 一般为系统中的每个功能模块设计 1 个业务逻辑层的类,实现此模块的所有业务逻辑。在课程添加中,所需要的业务逻辑为课程添加。首先,由于需要调用数据访问类CourseAccess 因此,在类内设计 1 个字段为此类对象:CourseAccess courseAccess = newCourseAccess()。其次,此类需要设计如下方法:1、添加课程 方法名: AddXX 形参:课程类对象 返回值: void 方法内代码设计:(1)调用
18、 CourseAccess 类对象的 Exist()方法,判断形参所表示的课程类对象是 否存在,若存在方法返回;(2)调用 CourseAccess 类对象的 AddCourse()方法,添加课程,并利用返回值判 断添加是否成功。3-2-3 界面层的设计 界面层的设计,首先需要根据用户的功能需求部署恰当控件,这些控件部署在第2 模块已实现,不用改变。然后,把功能实现代码放在恰当控件的恰当事件中,在这些代码 中,需要调用业务逻辑层的方法实现。课程添加时,界面上主要的功能如下:1、 按下添加按钮,实现课程记录的插入(1)代码放在按钮的 CLICK 事件中;(2)代码设计思路:首先进行控件的输入正确
19、性验证;其次利用控件的输入值,生成1 个课程实体类对象;利用此对象,调用业务逻辑类对象的AddCourse ()方法,插入记录;最后刷新浏览。任务的设计思路1、 在 DAL 工程中新建针对课程表的数据访问类文件,将所需的2 个方法设计在内。2、在 BLL 工程中新建针对课程管理的业务逻辑类文件,并设计相关方法。3、优化界面层代码,调用业务逻辑层类的方法,实现添加。4、 在 DAL 工程中,要用到 DBHelper 类和课程实体类 Course,分别位于 Common 和Modal 工程中,所以,必须在工程中加入对此2 个工程的引用。同理,BLL 工程中,要用到CourseAccess 类和课程
20、实体类 Course,分别位于 DAL 和 Modal 工程中,所以,必须在工程 中加入对此 2 个工程的引用。UI 工程中,要用到 CourseBiz 类和课程实体类 Course,分别 位于 BLL 和 Modal工程中,所以,必须在工程中加入对此2 个工程的引用。任务的实施1、 右击 DALX程,选择新建类文件,命名为:CourseAccess.cs 命名空间改为BFCourse.DAL 右击工程,选择添加引用,选中工程里的Common 和 Modal,然后添加引用语句:using BFCourse.Modal。using BFCourse.Common2、CourseAccess 类中
21、判断某课程记录是否存在的方法:/根据课号判断此课程是否存在/ /publicbool Exist( string courseId)string strSql = string .Format( select * from course where courseId=0 ,courseId)。using ( OleDbDataReader dr = DBHelper.GetReader(strSql)if (dr.HasRows) returntrue。else returnfalse。3、CourseAccess 类中添加课程的方法,注意形参是课程对象/利用课程对象添加课程/ publici
22、nt AddCourse( Course course)string strSql = string .Format( insert into coursevalues(0,1,2) ,course.CourseId,course.CourseName,course.C ourseCredit)。return DBHelper.ExecNonQuery(strSql)。4、 右击 BLL 工程,选择新建类文件,命名为: CourseBiz.cs。命名空间改为BFCourse.BLL 右击工程,选择添加引用,选中工程里的DAL 和 Modal,然后添加引用语句:using BFCourse.Mo
23、dal。using BFCourse.DAL。5、CourseBiz 类部分代码publicclass CourseBizCourseAccess courseAccess = newCourseAccess()。/判断逻辑,插入课程/publicvoid AddCourse( Course course)if (courseAccess.Exist(course.CourseId)M e s s a g e B ox.Show( 此课程号已存在,请重新输入)。return。if (courseAccess.AddCourse(course) 0)M e s s a g e B ox.Show
24、( 添加成功)。elseM e s s a g e B ox.Show( 添加失败)。6、右击 UI 工程,命名空间改为 BFCourse.U。右击工程,选择添加引用,选中工程里的BLL 和 Modal,然后添加引用语句:using BFCourse.Modal。using BFCourse.BLL。7、界面层重构的部分代码private void buttonAdd_Click(object sender, EventArgs e)if (textBox1.Text = String .Empty)MessageBox.Show(请输入课程编号)。return。if (textBox2.Te
25、xt = String .Empty)MessageBox.Show(请输入课程名称)。return。if (textBox3.Text = String .Empty)MessageBox.Show(请输入课程学分)。return。string courId = textBox1.Text.Trim()。string courName = textBox2.Text.Trim()。int courCredit = Convert .ToInt32(textBox3.Text.Trim()。Course course = newCourse(courId, courName, courCred
26、it)。CourseBizcb= newCourseBiz()。cb.AddCourse(course)。此时运行系统,记录添加的部分就是由这 3 层实现的,界面层按下“添加”按钮后,调用 BLL 层的 void AddCourse(Course course)方法, 此方法又调用 DAL 层的 bool Exist(string courseld)和 int AddCourse(Course course)方法,它们再调用 DBHelper 中的具体数据记录操作 方法。是一个标准的 3 层架构调用机制。总结: 3 层架构设计时,根据功能需求,从下而上设计,实际运行时,从上而下调 用。图 3.
27、7 课程添加的 3 层调用流程举一反三任务3-3:课程删除的3层实现效果与描述图 3.8 添加课程删除功能后的课程管理界面效果图如图 所示,为了实现课程记录的删除,需要按主键删除,所以添加了课程号的 文本框和删除按钮。用 3 层的技术来实现。首先,也需要理顺记录删除的业务流程,如下图所示。图 3.9 课程删除的业务流程要判断输入的完整性;然后判断输入的课程号主键在数据库中是否已有;若有,则删 除该主键的记录。然后,根据业务需求,从底到高来设计每层。单纯的判断记录有无,已在上个任务实 现;单纯的记录删除操作,就可以添加在课程表的数据访问层类。记录删除的逻辑功能: 判断输入的课程号主键在数据库中是
28、否已有,若有,则删除记录,由业务逻辑层添加调用 数据访问层的删除方法来实现;最后,在界面层,只需判断文本框的输入完整性,然后调 用业务逻辑层的删除方法。本任务的设计流程如记录添加的设计流程,不再赘述。相关知识与技能3-3-1 数据访问层的方法设计在上个任务的 CourseAccess 类中,为了实现删除,需要添加的方法有:1、删除记录方法名: DelXX形参:代表主键的变量课程号返回值: int方法内代码设计:( 1) 设计语句 delete( 2) 调用 DBHelper 类,用 ExeccuteNonQuery ()方法执行此语句并返回 应用场合:在表中删除一条记录,根据返回值是否大于 0
29、 判断执行成功否。3-3-2 业务逻辑层的方法设计在上个任务的 CourseBiz 类中,为了实现删除,需要添加的方法有:1、删除课程方法名: DelXX形参:代表主键的变量课程号返回值: void方法内代码设计:(1)调用 CourseAccess 类对象的 Exist()方法,判断形参的课程类对象是否存在,若不存在方法返回;(2)调用 CourseAccess 类对象的 DelCourse()方法,删除课程,并利用返回值判断添加是否成功。3-3-3 界面层的设计界面层的设计,部署恰当控件后,把功能实现代码放在恰当控件的恰当事件中。课程 删除时,界面上主要的功能如下:1、 按下删除按钮,实现
30、课程记录的删除(1)代码放在按钮的 CLICK 事件中;(2)代码设计思路:首先进行控件的输入正确性验证;将控件的值放在某变量中;利 用此变量作为实参,调用业务逻辑类对象的DelCourse ()方法,删除记录;最后刷新浏览。任务的设计思路1、在 DAL 工程中 CourseAccess 类,添加删除课程的方法。2、在 BLL 工程中 CourseBiz 类,添加课程删除相关方法。3、优化界面层代码,调用业务逻辑层类的方法,实现删除。 任务的实施1、 在 CourseAccess 类中,添加如下方法: 删除课程,注意形参是课程号/根据课程号删除课程/publicint DelCourse( s
31、tring courseId)string strSql = string .Format( delete from course where courseId=0 , courseId)。return DBHelper.ExecNonQuery(strSql)。2、在 CourseBiz 类中,添加如下方法:/判断逻辑,删|除课程/publicvoid DelCourse( string courseId)if (!courseAccess.Exist(courseId)MessageBox.Show( 此课程号不存在,请重新输入)。return。if (courseAccess.DelCo
32、urse(courseId) 0)MessageBox.Show( 添加成功)。elseMessageBox.Show( 添加失败)。3、界面层重构的代码如下:privatevoid buttonDel_Click( object sender, EventArgs e) if (textBox4.Text = String .Empty)MessageBox.Show( 请输入课程编号)。return。string courId = textBox4.Text.Trim()。CourseBiz cb= newCourseBiz()。cb.DelCourse(courId)。此时运行系统,记录
33、删除的部分就是由这 3 层实现的,界面层按下“删除”按钮后, 调用 BLL层的 void DelCourse(string courseld)方法,此方法又调用DAL 层的 bool Exist(stringcourseld)和 int DelCourse(string courseId)方法,它们再调用 DBHelper 中的具体数据记录操作 方法。也是一个标准的 3 层架构调用机制。图 3.10 课程删除的 3 层调用流程举一反三1、任务3-4:课程浏览的3层实现效果与描述在上面 2 个任务中,利用 3 层架构,实现了课程记录的添加和删除。在记录添加和删 除后,都需要重新刷新课程表的浏览;
34、在窗体加载时,也需要在数据网格中浏览课程表当 前所有记录。基于 3 层架构的课程记录浏览还未实现。记录浏览的业务流程比较简单,就是再窗体加载时,添加、删除记录后,浏览课程表 当前的而所有记录。记录浏览在本质上就是:给数据网格提供数据源。数据源要求是1 个数据表 DateTable,或者是 1 种集合:如数组、集合、泛型集合等。根据业务需求,从底到高来设计每层。在课程表的数据访问层类,添加浏览方法,将 课程表的当前所有记录取出,并放入集合。在课程管理的业务逻辑层类,添加浏览方法, 调用数据访问层的新方法,取得此集合;最后,在界面层,在恰当控件的恰当事件里,调 用业务逻辑层的浏览方法。本任务的设计
35、流程如记录添加的设计流程,不再赘述。相关知识与技能在本任务中,需要用到新的知识点:集合和泛型集合。3-4-1 泛型集合的定义与使用 集合好比容器,将一系列相似的对象组合在一起,集合中包含的对象称为集合元 素。 .NET 中 , 集合 可分为 泛型集 合类 和非泛 型集合 类。 泛 型集 合类一 般位于 system.Collections.Generic 命名空间,非泛型集合类位于 System.Collections 命名空间,除此 之外,在 System.Collection. Specialized 命名空间中也包含了一些有用的集合类。1、非泛型集合 System.Collections
36、 命名空间下的.NET 非泛型集合类如下所示: System.Collection s.ArrayList :数组集合类System.Collections.BitArray :布尔集合类System.Collectio ns.Queue :队歹 USystem.Collections.Stack:堆栈System.Collectio ns.Hashtable:哈希表System.Collecti on s.SortedList :排序集合类非泛型集合操作直观,但由于集合中的对象是 Object 类型,如果集合中需要存放其它 类型的对象,则每次使用都必须进行繁琐的类型转换。因此,一般情况下,泛
37、型集合用的 比较多。2、泛型泛型就好比 Word 中的模板, 在定义 Word 模板时, 对具体编辑哪种类型的文档是未知 的。 在 .NET中,泛型提供了类、结构、接口和方法的模板,定义泛型时的具体类型也是未 知的。例如,可以定义一个泛型类:class FX private T x。public FX() public FX(T x) this .x = x。 public T num() return x。此类表示一种模板,此模板中包含一个字段, 2 个构造函数,和一个返回字段值的方 法,字段和方法的类型都是未知的。实例化此类可以是:FX f=new FX(3)。 表示用整型来实例化,并为字
38、段赋值为3。也可以这样实例化:FX g = new FX(3.4)。 表示用实型进行实例化,并为字段赋值3.4 。所以,实例化泛型类必须在 内填上确定的类型,表示此模板目前作用于什么类型。3、泛型集合在 3 层结构的应用程序中,用到的泛型集合 System.Collections.Generic 命名空间下 的 .NET 泛型集合类主要是: System.Collections.Generic .List 类。查阅 msdn 的 List(Of T) 类, 对泛型集合进行定义和使用。(1)定义ListvT 集合名=new ListvT ()。表示定义 1 个 List 类的泛型集合,集合中对象
39、的类型为T。其中的 T 就是所要使用的类型,既可以是简单类型,如string、int,也可以是用户自定义类型如 course 类。(2)属性Cou nt:获取集合中实际包含的元素数Item :获取或设置指定索引处的元素(3)方法Add(T item):将对象添加到 List 的结尾处。例如以下代码:class Personprivate string name 。private int age 。public Person() public Person(string name, int age)=name。 this.age=age。 privatevoid button1
40、_Click( object sender, EventArgs e)List pList = newList ()。string name = textBox1.Text.Trim()。intage = Convert .ToInt32(textBox2.Text.Trim()。Person p = newPerson(name,age)。pList.Add(p)。dataGridView1.DataSource = pList。定义了 1 个 Person 类的泛型列表后,可以将 Person 类的对象放入此集合,并作为 数据网格的数据源。3-4-2 数据访问层的方法设计 在上个任务的 C
41、ourseAccess 类中,为了实现浏览,需要添加的方法有: 1、获取此表的所有记录 方法名: GetXXList 形参:无 返回值:此表实体类的泛型集合 方法内代码设计:(1)设计语句 select * from 表(2)定义此表实体类的泛型集合对象(3)利用 using 语句,调用 DBHelper 类,生成一个 datareader 对象(4)利用 Read()方法读此 datareader 对象的所有行,每读 1 行,取到此表实体类的对象中,添加入泛型集合,返回泛型集合对象。 应用场合:取整个表的所有记录,作为数据展示控件(如数据网格)的数据源。3-4-3 业务逻辑的方法设计在上个任
42、务的 CourseBiz 类中,为了实现浏览,需要添加的方法有:1 、课程浏览 方法名: GetXXList形参:无返回值: void方法内代码设计:(1)调用 CourseAccess 类对象的 GetCourseList ()方法,返回课程泛型集合类。3-4-3 界面层代码的重构 课程浏览时,界面上主要的功能如下:1、 窗体加载时,代码放在LOAD 事件中,调用业务逻辑类对象的GetCourseList()方法,实现浏览。2、添加或删除记录成功后, 在原有代码中添加, 调用业务逻辑类对象的 GetCourseList ()方法,实现浏览。任务的设计思路1、在 DAL 工程中 CourseA
43、ccess 类,添加浏览课程的方法。2、在 BLL 工程中 CourseBiz 类,添加课程浏览相关方法。3、 优化界面层代码,调用业务逻辑层类的方法,在3 个场合实现浏览。任务的实施1、在 CourseAccess 类中,添加如下方法:/获取课程列表/ public List GetCourseList()string strSql = string .Format( select * from course)。List list= newList ()。using ( OleDbDataReader dr = DBHelper.GetReader(strSql)while (dr.Read()public List GetCourseList()return course
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春房产中介服务合同
- 铝合金产品联合开发协议
- 儿童游乐场攀爬区施工合同
- 生态居住区雨污设施建设合同
- 辐射防护设施设计规范
- 商业建筑小型施工合同
- 茶叶公司运营总监聘用协议
- 免租金影视制作公司租赁合同
- 《现代法治的理念》课件
- 金融产品推广方案
- 02565+24273中医药学概论
- 2023年中央纪委国家监委机关直属单位招聘工作人员考试真题
- 2024-2025学年度教科版初中物理八年级上册期末模拟卷(含答案)
- 《旅游概论》考试复习题库(附答案)
- 1000亩水产养殖建设项目可行性研究报告
- 量子计算与区块链
- 微电子器件期末复习题含答案
- 广东珠海市驾车冲撞行人案件安全防范专题培训
- 2022版ISO27001信息安全管理体系基础培训课件
- 广东省深圳市宝安区多校2024-2025学年九年级上学期期中历史试题
- 广州市海珠区六中鹭翔杯物理体验卷
评论
0/150
提交评论