.NET解析网站三层架构

news/2024/4/28 22:13:59/文章来源:https://blog.csdn.net/windok2004/article/details/2543949
   所谓三层架构就是指数据访问层 (Data Access Layer) 、业务逻辑层 (Business Logic Layer) 、界面表示层 ( 英语忘了 ..)

       MS.NET里,ASP.NET有项技术叫Code Behind,它默认已经提供了二层。比如建立一个网页文件.aspx后就自动有一个.cs文件与之匹配,这里.aspx就是界面表示层而.cs就是业务逻辑层。

       那么三层架构无非是多抽象了一层数据访问层,把所有和数据库打交道的方法都封装到了数据访问层这个抽象类中。以下我举个简单的例子来描述什么是三层架构,界面层就不说了。

       一、简单的数据访问层

       public class Admin

     {

          public static bool Insert(string userName,string userPass)

          {

              //数据库连接字符串

              SqlConnection conn=new SqlConnection("...");

              //SQL语句操作

              SqlCommand cmd=new SqlCommand("insert into admin ...",conn);

              //SQL语句参数

              SqlParameter parm1=new SqlParameter("@User",SqlDbType.VarChar,50);

              parm1.Value=userName;

              ...

              conn.Open();

              //执行SQL语句操作

              cmd.ExecuteNonQuery();

              conn.Close();

         }

         public static bool Update()

     }

       以上抽象了一个Admin类,类中有个静态方法Insert,业务逻辑层如果要调用这个层的方法,只要Admin.Insert(this.tbUser.Text,this.tbPass.Text);

    

     二、简单的业务逻辑层

       public class WebForm1 : System.Web.UI.Page

     {

          protected System.Web.UI.WebControls.TextBox TextBox1;

          protected System.Web.UI.WebControls.TextBox TextBox2;

          protected System.Web.UI.WebControls.Button Button1;

 

          private void Button1_Click(object sender, System.EventArgs e)

         {

              string userName=this.TextBox1.Text;

              string userPass=this.TextBox2.Text;

              Admin.Insert(userName,userPass);

         }   

     }

 

三、改进的数据访问层

心细的读者会发现,上面的抽象类Admin里每个方法都要写SqlConnection、SqlCommand这样的效率是不高的,那么如何来改进呢?答案是再多一个加工类,把日常的数据库操作都封装进去!比如PetShop3.0提供的一个SQLHelper类,那么Admin类中的方法就可以这么写

public class Admin

     {

          public static bool Insert(string userName,string userPass)

          {

              string sql=insert into admin…”;

              SqlParameter[] parm=new SqlParameter[2];

parm[0]= new SqlParameter("@User",SqlDbType.VarChar,50);

parm[0].Value=userName;

              ...

              //SQLHelper.ExecuteNonQuery实现SqlCommand的ExecuteNonQuery功能

              //SQLHelper.CONN_STRING是数据库连接字符串

              SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING,sql,);

         }

         public static bool Update()

     }

    

四、再改进的数据访问层

假如有这样的情况,如果上面的Admin类中的Insert方法,参数很多,大于5个,那么业务逻辑层要传递参数时要一个一个传咯?这样显然很不好!不过也好办!再抽象一个类把所有参数封装起来(就象C中的结构体)那么Admin类的方法就变为

public class Admin

     {

          public static bool Insert(AdminInfo adminInfo)

          {

              string sql=insert into admin…”;

              SqlParameter[] parm=new SqlParameter[2];

parm[0]= new SqlParameter("@User",SqlDbType.VarChar,50);

parm[0].Value=adminInfo.userName;

              SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING,sql,);

         }

         public static bool Update()

     }

 

     上面实现了最简单的数据访问层以及稍微改进的数据访问层,这样一个三层架构就实现了。比如一个用户想插入一个新Admin信息到数据库,其一般的执行过程是:

       (1) 用户在界面输入用户名和密码 点提交

       (2) 这时到了业务逻辑层,它接受并处理该业务。具体是把界面层传递过来的参数打包封装并传递给数据访问层,然后调用其数据访问层方法

       (3) 数据访问层通过于数据库的交互完成用户的操作,并返回操作结果给上一层

 

目前还有一些工程是四层、五层、N层的。还可以再封装一个数据层接口层与接口工厂类,可以实现完全对数据库透明,即不管数据库采用Sql Server还是Oracle,只要在Web.config里写一个字符串来辨别即可自动转接。微软著名的PetShop3.0就是一个完全典型的三层架构经典,有兴趣的可以去研究下,保证受益非浅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_877796.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter给网站做压力测试

一、压力测试的目的 模拟20个用户同时对登录接口进行操作,查看性能指标,比如响应时间和出错率 二、实际操作步骤 1.案例介绍 给某网站登录页面http://www.tianguiedu.com/#/login 做压测,需要用到登录账号152******81和密码 2.使用F12分析网站…

某电商网站用户行为分析【已脱敏】

用户行为分析 final_data为脱敏后的数据 final_data.head()user_iditem_idbehavior_typeuser_geohashitem_categorytime054007195796335351NaN39402014-11-24 1611369526423378002941NaN48302014-11-22 1221212551581089267881NaN19702014-11-22 083722560731440907861NaN400…

Linux实训——搭建动态网站

山东科技大学 信息工程系 内容说明:本篇文章是《嵌入式操作系统》实训报告的第三部分,使用WordPress实现了动态网站的搭建,使用php编写了学生信息管理系统的动态网页。建议先阅读实训报告第二部分 《嵌入式操作系统》实训报告完整内容介绍&am…

使用requests和BeautifulSoup库实现从任意网站爬取数据_附源代码+注释

文章目录 一.了解页面信息二.爬取数据代码三.获取数据结果 一.了解页面信息 这里我们以酷狗音乐古风榜为例 由此可见我们需要我曲目和歌手的信息都在框住的class里面 二.爬取数据代码 #导入requests和BeautifulSoup库 import requests from bs4 import BeautifulSoupurl &…

黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)

黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转) 上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebRe…

黄聪:C#模拟网站页面POST数据提交表单(一)--WebClient (转)

黄聪:C#模拟网站页面POST数据提交表单(一)--WebClient (转) C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh…

搭建基于github的个人网站

注: 1. 没写完,持续更新。 2. 有些条目写的顺序可能会有点奇怪,比如说我可能写完给博客换主题,然后写了买域名,又突然觉得换主题那块要再加一些内容,所以看上去可能我还没讲到买域名,但是自己…

[网站动态]年轻态SNS席卷台湾

年轻态SNS席卷台湾 年轻态SNS,个人感觉,比BOKEE这种的距离赢利更为接近。这次的文章来自于台湾 BLOGGER(Jason Chiang),分析的很是透彻,结合我的文章,让我们再度思考年轻态SNS的盈利&#xff0c…

提升网站性能开发的10个技巧

摘要:随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键。高度联结的世界意味着用户对网络体验提出了更严苛的要求。文中为大家总结10条有关性能提升的经验。 随着网络的高速发展,网络性能的持续提高成为能否在芸芸Ap…

《SparkStreaming 2》--UpdateStateByKey操作、spark-submit提交、网站日志案例(禁止爬虫、transform和join连接、网站的UV访问数、窗口操作PV)

UpdateStateByKey操作(按照key更新状态) 其它案例都是之前spark用到过的,以下是特殊RDD (之前案例统计的是5秒内的总次数,并不是wordcount的总次数,此Rdd可以统计整个流 流过的内容的wordcount总次数) 该updateStateByKey操作允许您在使用新信息不断更新时保持任…

js事件中的onmouseout和onmouseleave

写一个项目的过程中发现一个问题: 鼠标监听A元素的onmouseout事件,结果当鼠标移到A元素里面的B元素时,事件也触发了。 原因是因为:事件冒泡。 当鼠标从A元素进入到B元素时,A也会触发自己的onmouseout事件&#xff0…

2022百度收录方法-顺鑫说seo

今年已经是2022年头了,现在百度是一个怎样的形式呢,好多人都在吐槽,也有很多默默无闻的人。 我自认为我是一个很有想法的人。但是我不认为我是一个聪明的人。 后来的我明白,时间和实践才是检验真理的唯一标准。 我们一定要多看&am…

网站设计流程

以理论的角度: 使用NoahWeb进行网站开发,您可以将开发过程分为三个阶段:需求阶段、实现阶段、以及发布阶段。在三个阶段中,您同样可做到始终探索用户需求,多次将DEMO交付客户进行演示,网站开发中由于NoahW…

负载测试—网站的“体能”测试

通常来说,负载测试可以采用手动和自动两种方式。手动测试会遇到很多问题,如无法模拟太多用户、测试者很难精确记录相应时间、连续测试和重复测试的工作量特别大等。因此对于负载测试,手动方式通常用于初级的负载测试。目前,绝大多…

如何查看网站的端口

转:http://jingyan.baidu.com/article/4dc40848be2fd2c8d946f1a0.html 本文教您: 1,网站的域名和端口是什么含义 2,网站的端口到底有哪些 方法/步骤 1 通俗化解释什么是网站的端口,特别实用。 ---------------------------------…

ubuntu网站服务器环境搭建

转账自:ubuntu网站服务器搭建 如果想用Ubuntu作为网站的服务器,一些基本的服务是必备的。本文对环境的搭建做一个简单的整理。 Appach Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和…

WordPress 网站漏洞扫描 wpscan Kali Linux

在 WordPress 网站漏洞扫描,我将向你展示一些有用的命令 , 我们可以使用在 wpscan 搜索已知的漏洞在 wordpress 博客。 打开终端 , 使用下面的命令以启动对目标 wpscan WordPress 网站。 使用 wpscan --url blog.tld (更换 blog.tld 域与要扫描的漏洞。…

linux获取网站的响应时间

一个简易的抓包脚本 ----- url_check.sh ----- if ! [ $# -eq 1 ] then echo "Usage For example:" echo "$0 www.yy.com" exit -1 fi domain$1 echo "输入URL:"$domain echo "" echo "开始curl检测:" cu…

Git 分支 - 分支的新建与合并 分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创

Git 分支 - 分支的新建与合并 分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创建一个分支。 在这个分支上开展工作。 正…

怎样得到一个清爽干净简洁的CSDN文章页面?开源一个小插件,可自由定制用于其他网站。【含视频教程】

!!!想直接看视频教程的请点这里!!! 一、原版CSDN文章页面与清爽版对比 1.1 原版CSDN文章页面 原版页面分了三次截图还没截全: 1.2 清爽版CSDN文章页面 二、忍不住吐槽一下CSDN(…