您的位置:首页 > 编程语言 > ASP

ASP.NET中三层结构的运用

2009-09-19 11:15 246 查看
ASP.NET中的三层结构分为表示层(UI),业务逻辑层(BLL),数据访问层(Models,DAL,IDAL,DALFactory,DB),下面我来说说我对学习三层结构的运用。
首先我给大家说说这三层都是什么意思。

1. 表示层:web项目自然是应用程序的表示层,就是访问的站点,它提供所有与用户进行交互的界面,通过业务逻辑层(BLL)项目相关方法,展示站点的功能。表示层主要的内容就是控件+事件。如果仅仅是展示,可能只需要将控件绑定数据即可,不需要编写代码;如果需要和用户交互,就要编写相关的事件代码。举个例子吧,比如说是用户“登录”按钮事件,可能需要编写代码验证用户输入内容是否合法(非空验证),然后通过调用业务逻辑的相关方法判断用户名和密码是否匹配,从而达到成功登陆的结果。
2. 业务逻辑层:BLL项目是业务逻辑层的项目,它为表示层提供所有业务的方法和数据访问,自然就是表示层与数据访问层的桥梁。当然它并不直接访问数据库,而是通过引用DALFactory项目来实现。
3. 数据访问层:DALFactory项目、IDAL项目、DAL项目都属于数据访问层的项目,其中那个DALFactory项目是数据访问的工厂;IDAL项目是提供了数据访问的接口;DAL项目实现了IDAL项目的接口,它可以根据不同的数据库环境实现不同的访问数据的方法。
4. 模型层:Models项目包含与数据库相对应的实体类,由于三层中每一层都需要使用该项目的类,也可以把它独立出来叫模型层。

说了这么多概念也许大家都不明白是什么意思,下面我通过一个简单的例子来详细讲讲。我们从模型层开始说,比如数据库的名字叫Northwind,其中有一个Region表,表中有两个字段(Id, Name)。模型层就是封装数据库表的字段的,把它做成属性,方便每一层的调用。下面就是把这个表封装成属性。
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
[Serializable]
public class RegionInfo
{
#region//私有字段
private int regionId;
private String regionName;
#endregion
#region//公有属性
public int RegionId
{
get { return regionId; }
set { regionId = value; }
}
public String RegionName
{
get { return regionName; }
set { regionName = value; }
}
#endregion
}
}
其中[Serializable]是序列化的意思,也许你会问为什么要序列化,序列化的含义是将对象的状态存储到特定介质中的过程。就是将实体对象作为数据的载体,常常在不同的途径中进行传递,为了保证数据的正确性所标记的。
数据访问层IDAL项目是定义接口的方便是把访问数据的实现与客户端分开。访问数据库无非就是增删改查。我现在举一个最简单添加的示例如下:
using System;
using System.Collections.Generic;
using System.Text;
using Models;
namespace IDAL
{
public interface IRegion
{
void AddRegion(RegionInfo region);//添加的方法
}
}
DALFactory项目是数据访问层的抽象工厂(决定创建哪种数据库类型的数据访问层.可以选择 SQL Server , Oracle),DALFactory引用IDAL,通过读取web.config里的程序集,加载类的实例,返回给BLL使用。这里提到一个web.config配置文件,示例如下:
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" />
</configSections>
<appSettings>
<add key="WebDAL" value="SQLServerDAL"/>
</appSettings>
<connectionStrings>
<add
name="DataAccessQuickStart"
providerName="System.Data.SqlClient"
connectionString="server=(local);database=Northwind;uid=sa;pwd=sa;" />
</connectionStrings>
</ configuration>
DAlFactory就是通过配置文件的读取与数据库连接并且将接口返回,让BLL项目使用,示例如下:
using System;
using System.Collections.Generic;
using System.Text;
using Models;
using IDAL;
using System.Reflection;
using System.Configuration;
namespace IDALFactory
{
public sealed class RegionFactory
{
private static readonly string path = System.ConfigurationManager.AppSettings["WebDAL"];
private RegionFactory() { }
public static IRegion CreateCategory() {
string className = path + ".Region";
return (IRegion)Assembly.Load(path).CreateInstance(className);
}
}
}
DAL项目是实现IDAL项目的中接口的类它的作用就是封装所有与数据库交互的操作。
示例如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Models;
using IDAL;
namespace SQLServerDAL
{
public class Region:IRegion
{
#region IRegion 成员
public void AddRegion(RegionInfo info)
{
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "insert into region values(@RegionID,@RegionDescription)";
db.AddInParameter(deleteCommand, "RegionID", System.Data.DbType.Int32,info.RegionId);
db.AddInParameter(deleteCommand, "RegionDescription", System.Data.DbType.String, info.RegionName);
db.ExecuteNonQuery(deleteCommand);
}
#endregion
}
}
BLL项目就是起到桥梁的作用了,就是将数据库中的增删改查通过BLL在页面使用代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Models;
namespace BLL
{
public class Region
{
public void AddRegion(RegionInfo info)
{
Region region = new Region();
region.AddRegion(info);
}
}
}
固然表示层就没有什么好说的了,通过按钮的事件直接调用BLL中的方法就可以进行增加了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: