ASP.NET三层架构详解
Power By: Tian
一、数据库
/*==========================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /*==========================================*/ if exists (select 1
from sysobjects
where id = object_id('newsContent')
and type = 'U')
drop table newsContent
go
/*==========================================*/ /* Table: newsContent */ /*==========================================*/ create table newsContent (
ID int identity(1,1) primary key,
Title nvarchar(50) not null,
Content ntext not null,
AddDate datetime not null,
CategoryID int not null
)
go
二、项目文件架构
实现步骤为:4-3-6-5-2-1
ID 项目描述用途项目引用实例所需文相关方法
关系
件
1
Web 表现层 Web 页和控件
引用BLL WebUI.aspx
WebUI.aspx.
cs
GetContent()
2
BLL 业务逻辑层 业务逻辑组件
引用 IDAL ,
Model ,使
用DALFactor y 创建实例
Content.cs
ContentInfo GetContentInfo(int id)
3 IDAL
数据访问层接口定义
每个DAL 实现都要实现的一组接口
引用 Model
IContent.cs
ContentInfo GetContentInfo(int id)
4
Model 业务实体 传递各种数据的容器 无引用
ContentInfo.
cs
5
DALFacto ry
数据层的抽象
工厂
创建反射,用来确定加载哪一个数据库访问程序集的
类
引用IDAL ,通过读取fi g 里设置的程序集,加载类的实例,返回给BLL 使用。
Content.cs
IDAL.Icontent create()
SQLServ erDAL
SQLServer 数据访问层
6
OracleDA L
Oracle 数据访问层 Microsoft SQL Server 特
定的Pet Shop DAL 实现,使用了IDAL 接口
引用 Model 和IDAL ,被
DALFactor y 加载的程序集,实现接口里的方
法。
SqlHelper.cs Content.cs SqlDataReader ExecuteReader()
PrepareCommand()
ContentInfo GetContentInfo(int id) 7
DBUtility 数据库访问组
件基础类
GetSqlServerConnectio nString 得到数据库连接字符串,也可省去该项目,
在
SQLServerDAL.SqlHelp
er 中用static readonly
string
SqlConnectionString 代
替。
无引用
实现步骤过程
1、创建Model,实现业务实体。
2、创建IDAL,实现接口。
3、创建SQLServerDAL,实现接口里的方法。
4、增加fig里的配置信息,为SQLServerDAL的程序集。
5、创建DALFactory,返回程序集的指定类的实例。
6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。
7、创建WEB,调用BLL里的数据操作方法。
注意:
1、fig里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。
2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。
3、项目创建后,注意修改各项目的默认命名空间和程序集名称。
4、注意修改解决方案里的项目依赖。
5、注意在解决方案里增加各项目引用。
三、各层间的访问过程
1、传入值,将值进行类型转换(为整型)。
2、创建BLL层的content.cs对象c,通过对象c访问BLL层的方法GetContentI nfo(ID)调用BLL层。
3、BLL层方法GetContentInfo(ID)中取得数据访问层SQLServerDAL的实例,实例化IDAL层的接口对象dal,这个对象是由工厂层DALFactory创建的,然后返回IDAL 层传入值所查的内容的方法dal.GetContentInfo(id)。
4、数据工厂通过fig配置文件中给定的webdal字串访问SQLServerDAL 层,返回一个完整的调用SQLServerDAL层的路径给 BLL层。
5、到此要调用SQLServerDAL层,SQLServerDAL层完成赋值Model层的对象值为空,给定一个参数,
调用SQLServerDAL层的SqlHelper的ExecuteReader方法,读出每个字段的数据赋值给以定义为空的Model层的对象。
6、SqlHelper执行sql命令,返回一个指定连接的数据库记录集,在这里需要引用参数类型,提供为打开连接命令执行做好准备PrepareCommand。
7、返回Model层把查询得到的一行记录值赋值给SQLServerDAL层的引入的Mod el层的对象ci,然后把这个对象返回给BLL。
8、回到Web层的BLL层的方法调用,把得到的对象值赋值给Lable标签,在前台显示给界面
四、项目中的文件清单
1、DBUtility项目
(1)connectionInfo.cs
using System;
using System.Configuration;
namespace DBUtility
{
///<summary>
/// ConnectionInfo 的摘要说明。
///</summary>
public class ConnectionInfo
{
public static string GetSqlServerConnectionString()
{
return ConfigurationSettings.AppSettings["SQLConnString"];
}
sqltransaction什么意思}
}
2、SQLServerDAL项目
(1)SqlHelper.cs抽象类
using System;
using System.Data;
using System.Data.SqlClient;
using DBUtility;
namespace SQLServerDAL
{
///<summary>
/
// SqlHelper 的摘要说明。
///</summary>
public abstract class SqlHelper
{
public static readonly string CONN_STR = ConnectionInfo.GetSqlServerConnectionString();
///<summary>
/// 用提供的函数,执行SQL命令,返回一个从指定连接的数据库记录集
///</summary>
///<remarks>
/// 例如:
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
///</remarks>
///<param name="connectionString">SqlConnection有效的SQL连接字符串</param>
///<param name="commandType">CommandType:CommandType.Text、
CommandType.StoredProcedure</param>
///<param name="commandText">SQL语句或存储过程</param>
///<param name="commandParameters">SqlParameter[]参数数组</param>
///<returns>SqlDataReader:执行结果的记录集</returns>
public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);
// 我们在这里用 try/catch 是因为如果这个方法抛出异常,我们目的是关闭数据库连接,再抛出异常,
// 因为这时不会有DataReader存在,此后commandBehaviour.CloseConnection将不会工作。
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论