6.1 三层架构的概述
6.1.1 三层架构简介
- 分层设计可避免模块间相同功能的重复编写,达到减少模块间的耦合性、提高独立性的系统设计要求
- ASP.NET 站点的设计开发中,通常采用三层架构的设计
- 数据访问层:主要用于实现对数据库的访问和操作
- 业务逻辑层:主要包含业务逻辑代码以及作为表现层和数据访问层之间的通讯桥梁,负责数据的传递和处理
- 表现层:用于显示数据和接收用户输入的数据,为用户提供可以交互的操作界面及表现逻辑
6.1.2 三层架构的优势
在项目中使用三层架构的优势
- 适于变化,利于维护。项目需求经常会发生变化,三层架构将功能模块分离,提高了项目的可维护性和代码的可重用性
- 适用于协作开发。目前,多数项目是团队多人协作开发的,有的负责界面设计,有的负责数据库操作模块,三层架构将各个功能模块分离,各自负责各层的模块,有利于协作开发
- 主流趋势。在企业级的开发中,三层架构是基本要求,大多数项目都会采用三层架构
6.2 模型层与数据层
由于三层之间存在数据交互,所以需要中间介质——模型层,模型层包含所有与数据表相对应的实体类。三层之间通过传输实体类对象来实现通信
模型层的命名
- 常见的命名方式有 Model、Models 或用解决方案名 +Model 的格式命名
- 模型层是单个 C# 类库项目,模型层中的实体类和数据表相对应
实体类结构
- 实体类的编写较为简单,只需对应数据表字段编写出实体类的属性即可
- 除了构造方法,实体类通常不含其他方法
[Serializable]
public class UserInfo
{
/// <summary>
/// 用户编号
/// </summary>
public int UserID { get; set; }
….
}
注意:
由于实体类对象作为层之间数据通信的载体,常需要在不同的场景下执行类型转换,可以使用 Serializable 特性标识实体类为可序列化,以便转换实体类对象
6.2.2 数据访问层
数据访问层(Data Access Layer,简称 DAL)负责与数据库的交互,运行数据库查询并执行更新
数据访问层的命名
- 数据访问层以 DAL 命名或以解决方案名称 +DAL 的格式命名
- 数据库中的每张表,在数据访问层都有相对应的数据访问类
数据访问类中的方法
- 增(Create)
- 删(Delete)
- 改(Update)
- 查(Select)
public static bool AddUserInfo(UserInfo user)//增
public static bool DeleteUserInfoByUserID(int userID)//删
public static bool UpdateUserInfo(UserInfo user)//改
//查:
public static UserInfo SelectUserInfoByUserID(int userID)
public static List<UserInfo> SelectUserInfosByFilter(string filterStr)
public static List<UserInfo> SelectUserInfosALL()
public static List<UserInfo> SelectUserInfosByPaging(int pageIndex,int pageSize,string filterStr)
DAL 项目中添加 UserInfoService 类
- 添加 DBHelper 类
- 编写 UserInfoService 类
public class UserInfoService
{
public static bool AddUserInfo(UserInfo user)
{ //删除 修改类似…
string sql=“…”;
return DBHelper.Instance().ExcuteSql(sql); }
public static UserInfo SelectUserInfoByUserID(int userID)
{ //查询
string sql=“…”;
SqlDataReader dr = DBHelper.Instance().GetDataReaderBySql(sql);
…
return user; }
…
6.3 业务层的搭建以及与数据层之间的调用
6.3.1 业务逻辑层
业务逻辑层(Business Logic Layer,简称 BLL)包含一系列执行于数据上的操作
业务逻辑层的命名
- 业务逻辑层通常命名为 BLL 或用解决方案名称 +BLL 的格式命名
- 每个实体类通常在业务逻辑层有对应的业务逻辑类。类的格式为实体类名称 +Manager
业务逻辑层的方法
- 每个业务逻辑类的方法用于处理具体的业务规则
public class UserInfoManager
{
public static bool Register(UserInfo user)
{
return UserInfoService.AddUserInfo(user);
}
public static bool DeleteUser(int userID)
{
return UserInfoService.DeleteUserInfoByUserID(userID);
}
public static bool UpdateUser(UserInfo user)
{
return UserInfoService.UpdateUserInfo(user);
}
public static UserInfo GetUserByUserID(int userID)
{
return UserInfoService.SelectUserInfoByUserID(userID);
}
…
}
6.4 表现层与三层之间调用
6.4.1 表现层
- 表现层由两个主要组件组成,分别是用户界面和表现层逻辑(UI 逻辑)
- 用户界面为用户提供了使用程序的接口,程序的所有行为均通过用户界面中的图形化元素或文本元素展现给用户
- 表现层给予用户直观的操作体验,对站点而言,界面的美观和易用非常重要
表现层的命名
- 通常以解决方案名称 +Web 格式命名,或用解决方案名称 +UI 格式命名
表现层的方法
- 表现层的方法主要是控件的事件处理方法,以及适用于整个站点的通用方法
步骤
- 新建 FreshLiveWeb 项目到当前的 FreshLive 三层架构项目中
- 选择 FreshLiveWeb 项目的“引用”,单击鼠标右键添加引用
- 在 FreshLiveWeb 项目中新建 MiniSite.Master 母版页
- 选择 FreshLiveWeb 项目
- 在创建完毕的 Login.aspx 页面中完成页面设计
- 在 Login.aspx 页面上添加验证控件
总结 :
- 在大中型ASP.NET站点的开发设计中,通常都采用三层架构的设计,即数据访问层、业务逻辑层和表现层
- 模型层包含所有与数据表相对应的实体类
- 实体类通常根据数据表的字段编写出对应的属性
- 数据访问层:主要用于实现对数据库的访问和操作
- 业务逻辑层:主要包含业务逻辑代码,以及作为表现层和数据访问层之间的通讯桥梁,负责数据的传递和处理
- 表现层:用于显示数据和接收用户输入的数据,为用户提供可以交互的操作界面