教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

C#三层架构 简单实例分析

来源:网络收集 时间:2026-08-20
导读: 基于3层架构的课程管理系统 本模块工作任务 ? ? ? ? 任务3-1:三层架构划分 任务3-2:数据访问层的实现 任务3-3:业务逻辑层的实现 任务3-4:表示层的实现 本模块学习目标 ? 1、掌握三层架构的划分原理 ? 2、掌握各层的设计思路,和层之间的调用关系 ? 3、利

基于3层架构的课程管理系统

本模块工作任务

? ? ? ?

任务3-1:三层架构划分 任务3-2:数据访问层的实现 任务3-3:业务逻辑层的实现 任务3-4:表示层的实现

本模块学习目标

? 1、掌握三层架构的划分原理

? 2、掌握各层的设计思路,和层之间的调用关系 ? 3、利用三层架构实现对课程管理模块的重构 ? 4、巩固OOP的基本概念和 OOP的编程思路

---------------------------------------------------------------------------------------------------------------------------------

任务3-1:三层架构划分

? 效果与描述

界面层 业务逻辑层 数据访问层

图3.1 包含多个项目的3层架构解决方案

本任务要求学生能够将原来的只有1个项目的课程管理模块,重构为标准的具有5个项目的3层架构的模块,并进行恰当的初始化,仍能实现课程记录的添加、浏览功能。在此过程中理解3层架构的划分原理,各层的任务,层之间的调用关系。

本任务的业务流程:

将原项目改为UI层新建BLL/ DAL/COMMON/MODL项目并初始化 初始化后仍能实现课程记录的浏览和添加

图3.2 单层转化为3层架构的业务流程

? 相关知识与技能

3-1-1 三层架构的划分原理 三层架构的划分如下图:

图3.3 三层架构原理图

1、 各层的任务

数据访问层:使用ADO.NET中的数据操作类,为数据库中的每个表,设计1个数据访问类。类中实现:记录的插入、删除、单条记录的查询、记录集的查询、单条记录的有无判断等基本的数据操作方法。对于一般的管理信息软件,此层的设计是类似的,包含的方法也基本相同。此层的任务是:封装每个数据表的基本记录操作,为实现业务逻辑提供数据库访问基础。

业务逻辑层:为用户的每个功能模块,设计1个业务逻辑类,此时,需要利用相关的数据访问层类中,记录操作方法的特定集合,来实现每个逻辑功能。

界面层:根据用户的具体需求,为每个功能模块,部署输入控件、操作控件和输出控件,并调用业务逻辑层中类的方法实现功能。

2、 层之间的调用关系

数据访问层的类,直接访问数据库,实现基本记录操作。

业务逻辑层的类,调用相关的数据访问类,实现用户所需功能。 界面层:部署控件后,调用业务逻辑层的类,实现功能。

将应用程序的功能分层后,对于固定的DBMS,数据访问层基本可以不变,一旦用户的需求改变,首先修改业务逻辑层,界面层稍做改动即可。这种做法使程序的可复用性、可修改性,都得到了很好的改善,大大提高了软件工程的效率。

3-1-2 ORM(对象关系映射)

在图3.1中看到,除了界面层、业务逻辑层和数据访问层之外,还有2个项目。其中,Common项目中一般放的是公用文件,如数据操作类DBHelper等,被数据访问层的类调用,其必要性在上个模块已述。Modal项目中存放的是实体类。

所谓的对象关系映射Object Relational Mapping,简称ORM,是为了解决面向对象的类,与关系数据库的表之间,存在的不匹配的现象,通过使用描述对象和关系之间映射的元数据,在程序中的类对象,与关系数据库的表之间建立持久的关系,用于在程序中描述数据库表。本质上就是将数据从一种形式转换到另外一种形式。

ORM是一个广义的概念,适应于关系数据库与应用程序之间的各类数据转换,目前有许多自动转换工具可用,如codesmith 等。在本教材中,利用手工书写代码的形式,实现ORM。

如对于学生选课管理系统数据库中的课程表course,其设计视图如下:

图3.4 Course表设计视图

可以这样设计类来描述它:

public class Course {

private string courseId; public string CourseId {

get { return courseId; } set { courseId = value; } }

private string courseName; public string CourseName {

get { return courseName; } set { courseName = value; } }

private int courseCredit; public int CourseCredit {

get { return courseCredit; } set { courseCredit = value; } }

public Course() { }

public Course(string courseId,string courseName,int courseCredit) {

this.courseId = courseId; this.courseName = courseName; this.courseCredit = courseCredit; } }

将表中的每个字段抽取为类的字段(注意类型匹配),并封装成属性,设计构造函数,来将表抽取为类。这种类就称为实体类。这个抽取过程称为对象关系映射ORM。

在Modal项目中,为数据库的每个表,都设计一个相应的实体类,这样,就相当于对每个表实体,在.NET程序中,都可以通过类对象来应用。在上面介绍的3层中,通常都会

用到实体类对象。

综上所述,这5个项目之间的关系是这样的:

UI(界面层)BLL(业务逻辑层)Modal(实体类)DAL(数据访问层)Common(DBHelper数据操作类)数据库

图3.5 三层架构中5个项目之间的关系图

? 任务的设计思路

1、在上个模块基于单层的课程管理的基础上,将原有的WINDOWS窗体应用程序的项目,设置为界面层,改名为UI,界面层的控件部署不用改变,并设置为启动项目;

2、在解决方案中添加业务逻辑层项目BLL、数据访问层项目DAL、Common项目、Modal项目,他们都是类库型的项目;

3、将DBHelepr类移到Common项目中;

4、在Modal项目中,为学生选课管理系统的每个表,设计对应的实体类。 5、设置好引用关系后,运行,可实现课程记录的添加和浏览。

注意:此时,3层结构虽已架设好,运行也可实现课程管理的记录添加和浏览功能。但是运行的仍是界面层代码,其余层的代码尚未设计。

? 任务的实施

1、在原来的版本中,用1个WINDOWS窗体应用项目就实现了课程管理,在3层架构体系中,当然,这个项目就是界面层。

首先,把原有的项目改名为UI,右击此项目,改名即可。 然后,右击解决方案,选择“设置启动项目”,即可将界面层项目设置为启动项目。 2、右击解决方案,分别生成4个新的项目,这些项目均是类库项目,按照惯例,数据访问层项目起名为DAL,业务逻辑层项目起名为BLL, 另外2个项目起名为Common和Modal。

3、右击Common,选择“添加”里的“现有项”,将DBHelper类添加入此项目。右击UI下原有的DBHelper类文件,选择“从项目中排除”。就实现了将DBHelepr类移到Common项目中。将命名空间改为BFCourse.Common,其中BFCourse为解决方案名。以后每个项目中的每个文件,都需要在前面加上解决方案名,这样,就都处于同一个命名空间BFCourse。

4、在Modal项目中,选择添加新建项,参考课程表的抽取方法,为学生选课管理系统的每个表,设计对应的实体类。同理,命名空间改为BFCourse. Modal。

5、此时,界面层代码会显示DBHelper找不到,因为移到了Common项目。所以,必

须在界面层项目UI中添加对Common项目的引用。 …… 此处隐藏:2676字,全部文档内容请下载后查看。喜欢就下载吧 ……

C#三层架构 简单实例分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/448545.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)