ASP.NET中三层结构的运用

 

ASP.NET中的三层结构分为表示层(UI),业务逻辑层(BLL),数据访问层(ModelsDALIDAL,DALFactoryDB),下面我来说说我对学习三层结构的运用。

首先我给大家说说这三层都是什么意思。

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中的方法就可以进行增加了。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值