asp.net程序编程模式

转载 2007年09月23日 20:49:00

首先asp.net应用程序是三层结构的,表示层-业务层-数据访问层,这个是大家经常采用的模式,但我在层之间加了些处理,主要是处理层与层之间的数据传输。下面是每层详细的内容。

业务层是一种业务逻辑的体现,与表示层无关,一般是一个类,包含业务的数据及相应的各种业务操作。业务层一般不直接调用数据访问层,而是通过一个数据访问服务类AccessService来调用,这样的话,数据访问层必须实现一定的接口IAccess(操作有LOAD,INSERT,UPDATE,DELETE)。当业务类要加载数据的时候,先把类的数据(一般是参数)打成一个包,然后调用AccessService的LOAD方法来调用数据访问层IAccess的LOAD操作,IAccess把数据从数据库读取出来,在打成个包,返回给AccessService,在返回给业务层,业务层把数据包解包后,数据变成业务层的数据(就是业务类的属性)。到这时完成业务数据的加载。之后在做相应的业务操作,在把数据打成包丢给AccessService处理,保存到数据库中。

为什么在业务层和数据层中间在加入一个AccessService,目的是为了降低层之间的偶合度,就是业务层和数据层无之间关联,数据层只是负责把数据永久化,与具体的业务也无关。如果要改动数据库类型,只要变动数据层就好了。

另数据层也不是直接访问数据库的,而是通过一个通用的DataServiceForSqlServer(SQLSERVER数据库的数据访问类),这个很多人都有的,就是些基本的操作,如ExecuteNonQuery、ExecuteDataSet、ExecuteReader等。

asp.net采用界面很代码分离的方式来实现的,很多从asp转向asp.net都习惯把代码写到aspx文件里面,或者某些方法还是采用asp的方式,那是不可取的。asp.net采用ViewState的机制来实现页面内状态的延续。大家知道WEB是无状态的,就是说当一个页面加载完成后,所有的页面对象将被丢弃,以HTML的方式把数据返回给浏览器。当浏览器发出请求,服务器根据请求,创建各种对象,处理对象,在把数据以HTML的方式返回给浏览器,所以说页面是无状态的,服务器根本不知道页面的上一个状态是什么。asp.net则采用VIEWSTATE来让服务器知道前一个页面的状态。这里说的页面都是同一个页面。asp.net一般把一种功能放在同一个页面,而asp一般都要采取多页的方式。

那么在asp.net,是怎么实现状态的延续的?这个要了解下ASP.net控件的生命周期(PAGE类也是个控件类)。当浏览器发出第一次请求,服务器做了如下的工作:

  Init初始化(创建控件树等初始化工作)
  LoadViewState加载视图状态(因为第一次,这时视图状态为空)
  LoadPostData处理回发数据(就是表单数据,因为在server,控件是以WEBCONTROL存在的,这时把表单的数据转换成控件的数据)
  Load加载(这里你可以编写你自己的初始化工作)
  RaisePostDataChangedEvent发送回发更改通知(引发更改事件以响应当前和以前回发之间的状态更改)
  RaisePostBackEvent处理回发事件(处理引起回发的客户端事件,并在服务器上引发相应的事件。如button的onClick事件是这时处理的)
  PreRender预呈现(在呈现输出之前执行任何更新。如果在这个事件后面调用任何对WEBCONTROL或VIEWSTATE的更新都将会丢失)
  SaveViewState保存状态(就是把当前的页面状态保存下在)
  Render呈现(生成呈现给客户端的输出,就是以HTML的方式返回给浏览器,其中的视图状态的数据以隐藏表单的方式保存,名称为“__VIEWSTATE”)
  Dispose处置(执行销毁控件前的所有最终清理操作)
  UnLoad卸载

费了一大对口舌讲上面的东西,目的只是弄清楚asp.net的机制。

接来说说表示层。表示层只做简单的数据验证和时间处理,不处理业务,而由业务层处理。在第一次加载的时候,将创建与页面有关的业务对象,并把数据绑定到界面的webcontrol,完成数据的加载。这个有两种方式,一种把这个业务对象也以视图的方式保存起来,并修改数据,等发出保存处理命令在提交到数据库;另在发出保存处理命令后在创立原来的业务对象,在修改数据提交到数据库。前者可以减少数据库访问的次数,都由于对象保存在VIEWSTATE(这里有个序列化的问题),每次服务器和客户端往返的数据较多。

表示层的一个业务事件一般可以到业务层的一个业务操作,这样表示层就不用管具体的业务是怎么是实现的。另我在中间还做了个处理,就是这么把表单的值赋到业务类的属性去(就是把值转化为业务数据,中间还有个数据类型转化的问题)。我是通过BinderReflectService的服务,实现转化的,大概是怎么实现的:在业务类有个BinderMappingCollection对象,记录业务类的属性名称,以及相关的控件名称,BinderReflectService会自动获取控件的数据,并赋值给指定的属性。

参考网站:

http://www.xfku.cn/showart.asp?art_id=502 

ASP.NET的三种开发模式

前言 ASP.NET 是一个开发框架,用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。 开发模式...
  • u013201439
  • u013201439
  • 2016年07月22日 19:57
  • 1648

ASP.Net的两种开发模式

原文出处: Edison Chou的博客(@周旭龙)   欢迎分享原创到伯乐头条 一、ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在...
  • u013430672
  • u013430672
  • 2015年08月27日 21:04
  • 2059

asp.net聊天室小程序练习

登录界面如图: ——logi
  • yayun0516
  • yayun0516
  • 2014年11月05日 08:57
  • 1714

Asp.net MVC 4 Web编程阅读有感

已经有几年没有花时间看一本书了,趁着混合架构迁移的机会,花了几天看了一下 Jess和Toddler合著的Asp.net MVC 4  Web 编程。 记得入软件的行就是从B/S着手的,大概在八年前,...
  • gongbenwen
  • gongbenwen
  • 2015年01月27日 20:57
  • 1180

socket实现简易聊天小程序

这是网络编程的小练习,在Linux下用socket,epoll实现服务器端与客户端的通信。...
  • kkmjy
  • kkmjy
  • 2017年07月09日 10:12
  • 318

Asp.net的抽象工厂模式

为什么要使用工厂模式呢?首先
  • wingahi
  • wingahi
  • 2014年05月26日 13:40
  • 1694

初识ASP.NET---一般处理程序

一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类。任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提。(凡是没有实现此接口的类,就不能...
  • Senior_lee
  • Senior_lee
  • 2014年07月31日 00:31
  • 2446

python编程(python开发的三种运行模式)

python作为一门脚本语言,使用的范围很广。有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程。不管怎么说,怎么使用python既取决于你自己的业务场景,也取决于你...
  • feixiaoxing
  • feixiaoxing
  • 2017年01月02日 17:58
  • 3664

ASP.NET之旅--浅谈Asp.net运行机制(一)

很多Asp.net开发人员都有过Asp的背景,以至于我们开发程序的时候总是停留在“页面”层次思考,也就是说我们常常会只考虑我们现在所做的系统是要完成什么功能,是要做问卷调查网站还是个人网站,而很少在“...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2013年09月02日 07:56
  • 11047

浅谈MVP架构及开发模式

Model-View-Presenter(MVP)概述     MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一...
  • ruglcc
  • ruglcc
  • 2016年01月15日 09:07
  • 3139
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net程序编程模式
举报原因:
原因补充:

(最多只允许输入30个字)