ASP.NET 三层架构详解(转)

一、三层架构的介绍:

三层架构,是为了便于我们开发项目后维护及变更的一种有效而实用的架构模式,在各种B/S项目中被广泛的采用着.

首先让我们来认识一下三层结构及每一层之前的作用和调用关系。

三层,即:

数据访问层(DAL):主要是对数据的增、删、改、查操作。

业务逻辑层(BLL):包含了项目中的业务逻辑,负责调用DAL中的方法实现业务的处理,并在表示层与数据访问层之间起到衔接的作用。

表示层(WebUI):用于显示数据和接受用户输入数据的一层,即为用户界面。

 

二、三层架构的实现:

1、将表抽象成模型

首先让我们以一个用户注册的例子来为大家举例,并通过这一例子进而了解三层架构应用

现有数据库Database,表与字段如下:

Admin 用户表 

AdminId 用户Id int 自增长 PK

UserName 用户名 nvarchar(50)

PassWord 密码 nvarchar(50)

RoleId 角色Id int FK->Role表

 

Role 角色表

RoleId 角色Id int 自增长 PK

RoleName 角色名称 nvarchar(50)

 

好了,现在我们已知了两张表及其字段,下面我们可以将其抽象成类以便于我们以对象的形式在各个层之间的传输和调用(我们把与表对应的类单独建一个类库存储,并命名为Models,即模型)

*注:以下代码全部省略命名空间引用部份,见谅

[Serializable] //序列化便于传输
    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; }
        }
    }

*Role类的代码省略

至此,我们已经将业务中所用到的表抽象为了两个类以便于我们操作,下面,是书写IService接口的时候了~

2、写好接口,便于规范DAL方法(我们在这里将接口的类库命名为IService)

有了Models提供的类,我们可以根据类来书写接口了,由于我们只以用户的注册为例,所以我们在这里只书写两个方法

    public interface IAdminService
    {
        int AddAdmin(string userName,string passWord,int roleId); //根据用户名密码和选择的角色来注册
        int AddAdmin(Admin admin); //根据一个用户对象进行注册
    }

接口是一个方法的规范,它不需要具体的实现,只需要描述一个方法的参数和返回值即可,是不是很简单呢?有了这些方法的接口,我们就该写实现类了

 

 3、遵循接口,实现DAL方法

有了接口,我们下面来真正的开始写数据库操作的方法

*注省略传统的SqlHelper方法(即通用的数据库类,其中包含数据库的连接方法和基本增删改查方法,与业务无关),我们讲以业务方法为主要介绍对象

 public class AdminService:IAdminService //实现IAdminService接口
    {

        public int AddAdmin(string userName, string passWord, int roleId) //实现AddAdmin方法 参数 用户名密码 角色Id
        {
            string strSQL = "spAddAdmin"; //调用存储过程
            SqlParameter[] paras = new SqlParameter[] //设置存储过程参数数组
            {
                new SqlParameter("@UserName",userName),
                new SqlParameter("@PassWord",passWord),
                new SqlParameter("@RoleId",roleId)
            };
            return SqlHelper.ExecuteCommand(strSQL, paras); //调用SqlHelper类的通用更新方法
        }

        public int AddAdmin(Admin admin) //同上 参数用户对象
        {
            string strSQL = "spAddAdmin";
            SqlParameter[] paras = new SqlParameter[]
            {
                new SqlParameter("@UserName",admin.UserName),
                new SqlParameter("@PassWord",admin.PassWord),
                new SqlParameter("@RoleId",admin.Role.RoleId)
            };
            return SqlHelper.ExecuteCommand(strSQL, paras);
        }

    }

OK,至此,我们的DAL层中的类书写完毕,下面我们来一起看一看它们是如何在BLL层中调用并传递给WebUI的吧~

 

4、BLL层调用DAL,传递至WebUI

我们现在已经有了在DAL中对于用户注册的方法,下面我们只需要书写一个用户的业务类,并且调用该方法即可实现用户的注册功能(我们把这些方法统一放在一个名为BLL的类库中)

 

     public class AdminManager //BLL中Admin的业务类名
    {

        [DataObjectMethod(DataObjectMethodType.Insert)]  //声明该方法类型为插入
        public static int AddAdmin(string username, string password, int roleid)//静态用户注册方法,提供用户名 密码 角色Id 3参数,返回int型便于表示层判断
        {

            AdminService as = new AdminService();  //创建一个DAL中的AdminService类对象

            return as.AddAdmin(username,password,roleId); //调用DAL方法执行注册
            //return AbstractFactory.ChooseFactory().CreateAdminService().AddAdmin(username, password, roleid); //通过抽象工厂,调用DAL中的静态方法 抽象工厂会在后面作为拓展介绍
        }

 

        [DataObjectMethod(DataObjectMethodType.Insert)] //同上
        public static int AddAdmin(Admin admin) //静态用户注册方法 提供用户对象参数返回int型
        {

           

            AdminService as = new AdminService();

            return as.AddAdmin(username,password,roleId); //调用DAL方法执行注册
            //return AbstractFactory.ChooseFactory().CreateAdminService().AddAdmin(admin);
        }

     }

 全部的业务我们都已经完成了,下面,我们唯一要做的就是在表示层中看一看它们如何调用BLL的,并且如何处理返回的结果的

 

5、表示层的应用

表示层所关注的仅仅是BLL层中的方法,因此,我们在表示层中也只需引用BLL层,然后调用方法即可,我们仍旧继续我们的登录操作,请看代码:

    protected void btnLogin_Click(object sender, EventArgs e) //按钮点击提交方法
    {
        if (AdminManager.AddAdmin(txtUserName.Text, txtPassWord.Text,txtRoleId.Text) > 0) //调用BLL中的方法,判断是否注册成功
        {

            //注册成功
            HttpCookie cookieTime = new HttpCookie("LoginInfo"); //写入Cookie 下略,在这里我们只关注三层
            cookieTime.Values["LoginTime"] = DateTime.Now.ToString();
            cookieTime.Values["LoginAddress"] = Request.UserHostAddress;
            cookieTime.Expires = DateTime.Now.AddDays(3);
            Response.Cookies.Add(cookieTime);

            Session["AdminInfo"] = AdminManager.AdminLogin(txtUserName.Text, txtPassWord.Text)[0];

            Response.Redirect("~/Default.aspx"); //跳转页
        }
        else //注册失败
        {
            Response.Write("注册失败"); //提示信息
        }
    }

 

致此,关于Asp.net的3层架构就全部介绍完了

我们来将其要点和调用关系在汇总一下

首先我们要讲数据库的每个表抽象成一个对应的类,如果有主外键关系,则以对象的形式引用(Models)

然后,我们开始书写规范DAL方法的接口,在这里我们需要考虑到所用到的参数和返回值(IService)*引用Moldes

有了接口,我们可以就去实现DAL中的相对应方法了(DAL)*引用Moldes 引用IService

然后,我们在BLL层中,我们调用DAL中的方法 *引用Models 引用DAL(如果采用抽象工厂模式,则引用IService)

最后,我们在视图层中调用BLL中的业务方法,实现3层之间相互的业务调用 *仅引用BLL

 

关于3层架构就介绍到这里,关于抽象工厂,稍晚时候将做介绍,谢谢~

转载于:https://www.cnblogs.com/wshotmail/archive/2012/12/29/2838421.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值