理解ASP.NET中的三层结构

  我们用三层结构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级.

  三层结构包含:表示层(USL),业务逻辑层(BLL),数据访问层(DAL)

  1:数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不

     是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.

  2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻

     辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

  3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,

如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
飞鸽传书-http://www.freeeim.com/
具体的区分方法

  1:数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成

     各个对数据文件的操作。而不必管其他操作。

  2:业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。

  3:表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。

三层结构说明

  完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层

  .否则你的应用是不是多层结构,或者说是层结构的划分和组织上是不是有问题就很难说.

不同的应用有不同的理解,这是一个概念的问题.

流程图

部署三层结构

1:新建一空白解决方案

2:在此解决方案上添加>>新建项目>>类库 取名DBEntity(数据库实体)

3:在此解决方案上添加>>新建项目>>类库 取名DAL(数据访问层)

4:在次解决方案上添加>>新建项目>>类库 取名BLL(业务逻辑层)

5:在次解决方案上添加>>新建网站>>ASP.NET网站 取名WebSite(表示层,WinForm项目的话添加一Window应用程序)

6:DAL,BLL, WebSite分别添加对数据库实体DBEntity的引用

7:BLL添加对对DAL的引用,WebSite添加对BLL的引用

下面用一用户登陆演示项目

DBEntity添加UserInfo.cs,代表数据库实体,一般是和数据库一一对应的

view sourceprint?01 using System;

02 using System.Collections.Generic;

03 using System.Text;

04

05 namespace DBEntity

06 {

07     public class UserInfo

08     {

09         private int _id;

10         private string _userName;

11         private string _passWord;

12

13         public int Id

14         {

15             get { return _id; }

16             set { _id = value; }

17         }

18

19         public string UserName

20         {

21             get { return _userName; }

22             set { _userName = value; }

23         }

24

25         public string PassWord

26         {

27             get { return _passWord; }

28             set { _passWord = value; }

29         }

30     }

31 }

DAL里添加UserDAL.cs

view sourceprint?01 using System;

02 using System.Data;

03 using System.Data.SqlClient;

04 using System.Configuration;

05 using System.Collections.Generic;

06 using DBEntity;

07

08 namespace DAL

09 {

10     public class UserDAL

11     {

12         private string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString();

13         public UserInfo Login(string userName, string passWord)

14         {

15             UserInfo info = new UserInfo();

16             string strSql = "select id,userName,passWord from Users where userName=@userName and passWord=@passWord";

17             SqlConnection conn = new SqlConnection(ConnectionString);

18             conn.Open();

19             SqlCommand com = new SqlCommand();

20             com.CommandType = CommandType.Text;

21             com.CommandText = strSql;

22             com.Connection = conn;

23             com.Parameters.AddWithValue("@userName", userName);

24             com.Parameters.AddWithValue("@passWord", passWord);

25             SqlDataReader dr = com.ExecuteReader(CommandBehavior.CloseConnection);

26             if (dr.Read())

27             {

28                 info.Id = Convert.ToInt32(dr["id"]);

29                 info.UserName = dr["userName"].ToString();

30                 info.PassWord = dr["passWord"].ToString();

31                 return info;

32             }

33             else

34             {

35                 return null;

36             }

37         }

38     }

39 }

BLL里添加UserBLL.cs

view sourceprint?01 using System;

02 using System.Collections.Generic;

03 using System.Text;

04 using DBEntity;

05 using DAL;

06

07 namespace BLL

08 {

09     public class UserBLL

10     {

11         UserDAL dal = new UserDAL();

12         public UserInfo Login(string userName, string passWord)

13         {

14             return dal.Login(userName, passWord);

15         }

16     }

17 }

Web里Login.aspx对应的后台代码

view sourceprint?01 using System;

02 using BLL;

03 using DBEntity;

04

05 public partial class _Default : System.Web.UI.Page

06 {

07     protected void Page_Load(object sender, EventArgs e)

08     {

09

10     }

11     protected void Button1_Click(object sender, EventArgs e)

12     {

13         UserBLL data = new UserBLL();

14         UserInfo info = new UserInfo();

15         info = data.Login(TextBox1.Text, TextBox2.Text);

16         if (info != null)

17         {

18             //登陆成功

19             Response.Write("<script>alert(OK!)</script>");

20         }

21         else

22         {

23             //登陆失败

24             Response.Write("<script>alert(ERROR!)</script>");

25         }

26     }

27 }

至此,简单的三层架构用户登陆完成了!

水平有限,写的不好大家来指点!

下次写下三层架构的扩展:工厂模型

附源码下载:ThreeModelSolution.rar

理解ASP.NET中的三层结构相关推荐

  1. .net数据源控件绑定mysql_理解asp.net中DropDownList编辑数据源,绑定数据库数据。...

    一.理解asp.net绑定数据库 终于学习到了连接数据库部分的内容,杨中科老师视频看起来挺轻松的,如果是高清版就更ok了. 我发现我学习新的编程语言会有一个特点,都想要赶紧学习数据库,数据就是一切,有 ...

  2. 理解asp.net中DropDownList编辑数据源,绑定数据库数据。

    一.理解asp.net绑定数据库 终于学习到了连接数据库部分的内容,杨中科老师视频看起来挺轻松的,如果是高清版就更ok了. 我发现我学习新的编程语言会有一个特点,都想要赶紧学习数据库,数据就是一切,有 ...

  3. 深入理解asp.net中的 __doPostBack函数

    前段时间做一个.net网站的时候,用到了模拟前端按钮刷新updatePanel进行局部刷新的时候,遇见了这个问题,当时没顾上记下来,查看网上资料,记下来留着以后查看. 很早以前,当我刚接触asp.NE ...

  4. 百度得来的所谓“三层结构”

    三层结构 三层结构解释 所谓三层体系结构,是在客户端与数据库之间加入了一个中间层,也叫组件层.这里所 说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也 不仅仅有B/S应用才 ...

  5. 从经典的MVC模式到Web三层结构

    暑假这段时间,在海康这边实习,参与了海康iVMS-8700客户端的开发,对MVC有了新的认识,将之前写的这篇博客更新一下.有错误的地方,欢迎大家批评指正. 经典的MVC 什么是MVC? 先来说说MVC ...

  6. 使用VS搭建三层结构

    参考资料:http://book.51cto.com/art/200906/131383.htm 通过一个简单的登录功能实现,讲述如何搭建三层结构. 1.搭建数据访问层 (1)打开VS 2005开发环 ...

  7. Asp.net三层结构原理与用意学习入门教程(一)

    接解asp.net已很久了,一直采用一个解决方案一个项目的方式去开发,所有的数据操作全放在一个类文件里,以为这就是所谓的三层结构,后来听说真正的大型网站的三层结构,应该是三个项目,或是更多的项目组成的 ...

  8. Java三层结构的概念_Java中的mvc和三层结构究竟是什么关系

    原标题:Java中的mvc和三层结构究竟是什么关系 一件事,要知其然往往很简单,要知其所以然通常不是那么容易,就如最近重新巩固spring的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手 ...

  9. asp.net MVC三层结构代码生成器

    asp.net MVC三层结构代码生成器 一.使用MVC开发的朋友都有一个苦恼,那就是三层结构大量重复代码比较鸡肋,写之无味,不写不行.最近也是从网上找了一些资料,自己又简单加工下,完善了该工具. 1 ...

最新文章

  1. hdu 1312 Red and Black 解题报告
  2. 李飞飞团队最新论文:如何对图像中的实体精准“配对”?
  3. ExtJS 4.2 教程-08:布局系统详解
  4. 遍历目录寻找指定文件
  5. 报告称中国出境游客移动支付消费首次超现金
  6. UPS蓄电池的内阻没有参考值,如何才能发现劣化蓄电池?
  7. VTK:PolyData之SelectPolyData
  8. 计算机导论设计实验,基于抽象知识点的《计算机导论》实验软件设计
  9. 如何让自己的内心强大起来
  10. 从特征分解到协方差矩阵:详细剖析和实现PCA算法
  11. Linux程序分析工具介绍—ldd,nm
  12. pygame游戏开发-简介
  13. 在Web页面中控制其元素的选择状态
  14. 山东大学高频电子线路实验四 振幅调制与解调实验详解
  15. 微信小程序中英文切换
  16. 【Aspose for .NET】Aspose.word操作表格:在表格中插入行
  17. 短视频Go研发框架实践-hulk
  18. SVN版本库备份和恢复
  19. 本地Windows上安装 MySQL数据库
  20. 实现带附件格式的业务服务质量周报邮件

热门文章

  1. javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set
  2. Node.js开发入门(一)——安装Node.js及编辑器配置
  3. mysql查询自定义数据_实现自定义查询的数据库设计及实现(一)
  4. mysql门派年龄最大的人_目前活着年龄最大的人
  5. HDFS详解(架构设计、副本放置策略、读写流程、进程、常用命令等)
  6. SpringCloud Ribbon实战以及Ribbon的源码浅析(四)
  7. jsp九大内置对象与servlet中java对象
  8. anaconda降级python_anaconda python更换清华源
  9. 【精彩实况】第三届大数据科学与工程国际会议
  10. 【软件工程】软件文档