ASP.NET 三层架构设计

一、三层概述

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。

 

二、使用三层的优点

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、有利于标准化;

5、利于各层逻辑的复用。

 

三、怎样实现简单三层架构

1、创建一个空白解决方案,添加新建asp.net网站保存到项目中新建WebUI文件夹下 

 

2、在网站中添加新项——Web配置文件(Web.config),修改debug="true"。以便以后调试

 

3、在网站App_Data右键新建SQL数据库,或导入现有数据库。
建立对应的存储过程。

首先我们举一个例子现有数据库Database,表与字段如下:

Admin 用户表 

AdminId 用户Id int 自增长 PK

UserName 用户名 nvarchar(50)

PassWord 密码nvarcha(50)

RoleId 角色Id int FK->Role表

Role 角色表

RoleId 角色Id int 自增长 PK

RoleName 角色名称 nvarchar(50)

 

4、在解决方案添加新建项类库Models(模型层),根据表建立类封装表中字段。将主表中外联字段写为子表对象,关联字段RoleId在类中应写为private Role role;并封装字段。例如下:

namespace Models
{
    public class Admin
    {
        private int adminId;

        public int AdminId
        {
            get { return adminId; }
            set { adminId = value; }
        }
        private string userName;

        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        private string passWord;

        public string PassWord
        {
            get { return passWord; }
            set { passWord = value; }
        }
        private Role role;

        public Role Role
        {
            get { return role; }
            set { role = value; }
        }
    }
}

(ps:类访问修饰符public才能在其他层中调用)

Role表也同样将字段封装代码略。。。。

 

5、再在解决方案添加新建项类库IDAL(数据访问层接口),添加引用Model,根据表建接口确定接口中的数据库增删改查访问方法。例:

public interface IAdminService
    {
        List<Admin> GetAllAdmins();
        Admin GetAdminByAdminId(int adminId);
        int AddAdmin(Admin admin);
        int AddAdmin(string userName, string passWord, int roleId);

}

 

6、解决方案添加新建项类库DAL(数据访问层),添加引用Model、IDAL、System.Configuration。新建一个SqlHelper连接数据库,即通用的数据库类,其中包含数据库的连接方法和基本增删改查方法,导入命名空间 System.Data、System.Data.SqlClient.
然后在SQLHelper建好后就可以创建实现IDAL中接口的类了。

例:

public class AdminService:IAdminService//实现IDAL接口
    {
          public List<Admin> GetAllAdmins()//返回所有Admin表中的数据,返回值List泛型集合
        {
            string strSQL = "spGetAllAdmins";//调用存储过程
            List<Admin> admins = new List<Admin>();
            DataSet ds = SqlHelper.GetDataSet(strSQL);//调用SqlHelper查询方法
            foreach (DataRow row in ds.Tables[0].Rows)//得到结果集遍历
            {
                Admin admin = new Admin();
                admin.AdminId = (int)row["AdminId"];
                admin.UserName = row["UserName"].ToString();
                admin.PassWord = row["PassWord"].ToString();
                admin.Role = (new RoleService()).GetRoleByRoleId((int)row["RoleId"]);
                admins.Add(admin);//将对象存入泛型集合
            }
            return admins;//返回List泛型集合

        }

 }

Role表与其他方法也如此样依次实现。

7 、创建抽象工厂AbstravtFactory:添加引用IDAL,DAL,System.Configuration。

    public abstract class AbstractFactory
    {
        public static AbstractFactory ChooseFactory()
        {
            string factoryName = ConfigurationManager.AppSettings["Database_FactoryName"].ToString();
            AbstractFactory factory = Assembly.Load("Database.Factory").CreateInstance(factoryName) as AbstractFactory;
            return factory;
        }

        public abstract IAdminService CreateAdminService();
        public abstract IRoleService CreateRoleService();
    }
       创建继承抽象工厂的实体工厂返回类对象。

  public class SqlFactory : AbstractFactory
    {
        public override IAdminService CreateAdminService()
        {
            return new AdminService();
        }

        public override IRoleService CreateRoleService()
        {
            return new RoleService();
        }
    }

 8 、在解决方案中新建类库BLL(逻辑业务层),添加引用IDAL、Factory、Models
调用工厂返回类对象完成业务逻辑

例:

 public static List<Admin> GetAllAdmins()
        {
            return AbstractFactory.ChooseFactory().CreateAdminService().GetAllAdmins();
        }

//由工厂抽象工厂得到创建的AdminService类对象调用其中的GetAllAdmins方法。

9、最后我们在WebUI网站中添加引用BLL、Models,在页面代码调用BLL显示结果,就可以完成一个三层架构+抽象工厂了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值