注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> ASP.NET >> Dotnet正文

ASP.NET应用程序的三层设计模型

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-2-13 19:20:11 【 】 【加入收藏

  ASP (Active Server Page) 的功能:
 
  可以把VBScript 编写的服务器端脚本嵌入到Web页面中, 在服务器端动态生成页面内容;
 
  可以通过COM 组件与数据库连接, 从而提供强大的事务处理功能。
 
  ASP的缺点:
 
  (1) 由于用脚本语言编写的控制逻辑要嵌入到HTML标记中, 因此ASP页面的开发效率低, 后期维护困难;
 
  (2) 动态部分采用脚本语言编写, 其功能受到限制, 不利于开发复杂的程序;
 
  (3) 程序员要自己维护页面之间数据的传递工作;
 
  (4) ASP技术很难采用面向对象的思路和方法来开发程序;
 
  关于ASP.NET
 
  可以采用WebForm编程模型, 该模型由底层系统自动完成客户(Client) 和服务器(Server) 之间繁琐的交互, 而且还提供了状态管理功能, 能在不同页面请求之间自动维护页面数据。
 
  关于B/S 结构
 
  与传统的C/S (Ciient/Server) 结构不同, B/S 结构中的大部分功能都在服务器端实现。服务器根据用户浏览器发送的请求, 在进行相应的运算和处理后, 向用户浏览器发送Web页面, 页面由标准的HTML 文本和Javascript 客户端脚本构成。
 
  ASP.NET的三层开发设计模型
 
  分层模型的优点:
 
  每一层只实现相对独立的功能,当任何一层发生变化时, 只要保持层间接口关系不变, 则其它各层都不会受到影响。
 
  (1) 用户界面层 (User Interface Tier):
 
  显示由业务逻辑层动态传送的数据信息,并通过使用相应的HTML 标记和CSS (Cascade Style Sheet) 模式来实现。同时还要负责用户录入数据的获得和校验,并传送给业务逻辑层。
 
  (2) 业务逻辑层 (Business Logic Tier):
 
  为用户界面层提供功能调用, 同时它又调用数据访问层所提供的功能来访问数据库。还要根据系统设计, 构造工程中关键的几个对象, 实现工程中的大部分逻辑控制功能。
 
  (3) 数据访问层 (Data Access Tier):
 
  主要用来实现与数据库的交互, 即完成查询、插入、删除和修改的功能。它根据业务逻辑层的要求,从数据库中提取或修改数据。访问数据库是系统中最频繁、最消耗资源的操作, 所以要优化对数据库的访问, 提高系统的性能和可靠性。
 
  BBS 工程实例
 
  整个工程被划分为四个功能模块:
 
  目录管理(Directory):采用“树”结构实现;
 
  文章管理(Article):文章存放在相应的目录下;
 
  用户管理(User):对用户的管理和授权;
 
  权限管理(Right):授权细化到各级目录和每篇文章;

 
  系统采用SQL Server 2000 Enterprise 数据库,Visual Studio开发工具和C#语言。
 
  整个工程为一个“方案”(solution),而分层模型中的每一层都对应为一个“项目”(Project),每个项目都对应各自的“名字空间”(Namespace),各个项目都从属于方案。
 
  本工程中包括四个项目,其中的Web、BussinessFacade 和DataAccess 项目分别对应设计模型的三个层次,还有一个项目Common用于定义层间的数据接口。结构如图所示:
 
  

 
  (1) Web 项目
 
  Web 项目与“用户界面层”对应,在这一层中,每个WebForm 页面显示部分存放在aspx文件中。
 
  (2) BusinessFacade 项目
 
  BusinessFacade 项目与“业务逻辑层”对应,在这一层中包括对四个“类”的定义:
 
  DirectorySystem、ArticleSystem、UserSystem 和 RightSystem,它们对应于系统的四大功能。
 
  例如在RightSystem 类中就提供了:
 
  用于目录权限鉴别的CheckDirectoryRight 方法;
 
  用于过滤目录列表的FilterDirectoryList 方法;
 
  用于用户授权的AuthorizeUser 方法;
 
  以及其它一些用于权限管理的成员函数,这些成员函数可以在用户界面层中直接调用。
 
  在这一层中要引入DataAccess 项目的名字空间, 从而使用该项目提供的功能实现对数据库的访问。
 
  (3) DataAccess 项目
 
  DataAccess 项目与“数据访问层”对应,在这一层中也包括四个“类”的定义:
 
  DirectoryAccess、ArticleAccess、UserAccess 和RightAccess.每个类的成员函数都是根据业务逻辑层的要求来访问SQL Server 中相应的存储过程(Stored Procedure)。
 
  例如: 在ArticleAccess 类中的LoadDetailByID 方法,就是用来调用SQL Server 中的GetArticleDetailByIDStatus 存储过程,从而实现通过文章的ID和状态得到文章的详细信息。
 
  在CLR 平台上进行。net 编程,一般由系统的垃圾收集机制(Garbage Collect)来消除不再使用的对象。但由于访问数据库将会消耗大量的系统资源, 所以这一层的四个类都派生自 System.IDisposable 接口(使用using 语句引用),使得在不使用本层对象的时候及时释放掉所占用的资源。
  

 (4) Common 项目
 
  为了使得各层之间在传递数据时具有统一的数据接口,在三个层次对应的项目之外又开发了一个Common 项目。在这个项目中定义了四个类:
 
  DirectoryData、AricleData、UserData 和RightData.这些类都派生自System.Data.DataSet 类,在每个DataSet 中定义了一些DataTable 用来按照固定的格式存储相应的数据。
 
  对于Web、BusinessFacade 和DataAccess 项目中定义的类, 其成员函数的参数和返回值的类型就可以采用Common 项目中定义的类, 这些类就是不同层之间数据传送的标准接口。
 
  附加代码:
 
  在ASP.NET 支持下,利用ADO.NET 可方便地访问基于Web 的数据库,不管数据源是关系数据库、非结构的数据库、文字数据库(如XML文件),还是如Microsoft Excel 一样的表格数据库,都可通过ADO.NET来存取。
 
  在实现远程数据库时,需要将ADO 与RDS 集成使用,以实现高性能、高可靠性的远程操作功能。
 
  DataGrid 控件的更新Code 如下:
 
  控件的更新Code 如下:

void editcommand (Object sender, DataGridCommandEventArgs e)

{

grid1.EditItemIndex = (int)e.Item.ItemIndex;

//重新读取数据并进行绑定

  bindgrid();

}

void Cancelcommand (Object sender, DataGridCommandEventArgs e)

{

grid1.EditItemIndex = -1;

//重新读取数据并进行绑定

  bindgrid();

}

void updatecommand (Object sender ,DataGridCommandEventArgs e)

{

//利用Sql 语句实现数据的更新

  string xm = grid1.DataKeys[(int)e.Item.ItemIndex];

string[] cols[4];

int numcols = e.Item. Cells.Count;

for (int i = 2; i < numcols; i++)

{

//取出各编辑框的值

   String colvalue = ((TextBox)e.Item.Cells[i].Controls[0]).Text;

   cols[i-2] = colvalue ;

}

string updatecmd ="UPDATE reg SET name ='"+ cols[0 ] +"',";

updatecmd +="sex ='"+ cols[1] +"',addr ='"+ cols[2] +"',";

updatecmd +="dh ='"+ cols[3] +"' where name =" + xm;

SqlCommand mycommand = new SqlCommand(updatecmd, myconnection);

mycommand.Connection.Open(); //打开数据连接

  mycommand.ExecuteNonQuery(); //执行连接

  grid1.EditItemIndex = -1; //连接成功,返回初始状态

  mycommand.Connection.Close(); //关闭连接

  bindgrid(); //重新读取数据并绑定

}

void bindgrid()

{

//数据绑定

 SqlDataAdapter mycommand = new SqlDataAdapter("select * from reg", myconnection);

 DataSet ds = new DataSet();

 mycommand.Fill(ds,"reg");

 grid1.DataSource = ds.Tables["reg"].DefaultView;

 grid1.DataBind();

}

   
  • 上一篇Dotnet:

  • 下一篇Dotnet: 没有了
  • 最 新 热 门
     ASP实例:ASP+AJAX制作无刷新新闻评论系统
     ASP教程:数组数据排序的程序例子
     怎样在xp下配置iis
     2000/XP IIS配置问题
     ASP.NET应用程序的三层设计模型
     asp.net 生成图片验证码
     动态执行C#代码
     C#:把其他进制的数转换为十进制
     另一种眼光看VB中的匿名类型
     在asp.net 中实现维护数据缓存
    最 新 推 荐
     ASP.NET应用程序的三层设计模型
     asp.net 生成图片验证码
     在asp.net 中实现维护数据缓存
     在MFC中使用WPF技术
     ASP.NET 2.0应用程序安全强化纵览
     WCF从理论到实践四:路在何方
     利用UrlRewrite,asp.net动态生成htm页面
     WCF 关于自定义MessageHeader支持
     如何定制页面提示信息(tooltips)
     对IOC和DI的理解
    相 关 文 章

    ASP实例:ASP+AJAX制作无刷新新闻评论系统
    ASP教程:数组数据排序的程序例子
    asp.net 生成图片验证码
    在asp.net 中实现维护数据缓存
    ASP.NET 2.0应用程序安全强化纵览
    对.net framework 反射的反思_asp.net技巧
    利用UrlRewrite,asp.net动态生成htm页面
    asp生成UTF-8格式的文件
    ASP教程:Stream 速查
    ASP打开任何类型文件提示保存

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用