ASP.NET应用程序的三层设计模型(学习)

简介:


回顾
ASP
 

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),各个项目都从属于方案。

本工程中包括四个项目,其中的WebBussinessFacade DataAccess 项目分别对应设计模型的三个层次,还有一个项目Common用于定义层间的数据接口。结构如图所示:

(1) Web 项目

Web 项目与“用户界面层”对应,在这一层中,每个WebForm 页面显示部分存放在aspx文件中。

(2) BusinessFacade 项目

BusinessFacade 项目与“业务逻辑层”对应,在这一层中包括对四个“类”的定义:

DirectorySystemArticleSystemUserSystem  RightSystem,它们对应于系统的四大功能。

例如在RightSystem 类中就提供了:

用于目录权限鉴别的CheckDirectoryRight 方法;

用于过滤目录列表的FilterDirectoryList 方法;

用于用户授权的AuthorizeUser 方法;

以及其它一些用于权限管理的成员函数,这些成员函数可以在用户界面层中直接调用。

在这一层中要引入DataAccess 项目的名字空间从而使用该项目提供的功能实现对数据库的访问。

(3) DataAccess 项目

DataAccess 项目与“数据访问层”对应,在这一层中也包括四个“类”的定义:

DirectoryAccessArticleAccessUserAccess RightAccess。每个类的成员函数都是根据业务逻辑层的要求来访问SQL Server 中相应的存储过程(Stored Procedure)

例如: 在ArticleAccess 类中的LoadDetailByID 方法,就是用来调用SQL Server 中的GetArticleDetailByIDStatus 存储过程,从而实现通过文章的ID和状态得到文章的详细信息。

CLR 平台上进行.net 编程,一般由系统的垃圾收集机制(Garbage Collect)来消除不再使用的对象。但由于访问数据库将会消耗大量的系统资源所以这一层的四个类都派生自 System.IDisposable 接口(使用using 语句引用),使得在不使用本层对象的时候及时释放掉所占用的资源

(4) Common 项目

为了使得各层之间在传递数据时具有统一的数据接口,在三个层次对应的项目之外又开发了一个Common 项目。在这个项目中定义了四个类:

DirectoryDataAricleDataUserData RightData。这些类都派生自System.Data.DataSet 类,在每个DataSet 中定义了一些DataTable 用来按照固定的格式存储相应的数据。

对于WebBusinessFacade DataAccess 项目中定义的类其成员函数的参数和返回值的类型就可以采用Common 项目中定义的类这些类就是不同层之间数据传送的标准接口。

附加代码

ASP.NET 支持下,利用ADO.NET 可方便地访问基于Web 的数据库,不管数据源是关系数据库、非结构的数据库、文字数据库(XML文件),还是如Microsoft Excel 一样的表格数据库,都可通过ADO.NET来存取。

在实现远程数据库时,需要将ADO RDS 集成使用,以实现高性能、高可靠性的远程操作功能。

DataGrid 控件的更新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();
}



本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/01/18/1044247.html,如需转载请自行联系原作者

相关文章
|
9天前
|
数据可视化
R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
|
9天前
|
机器学习/深度学习 存储 计算机视觉
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-4
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
|
9天前
|
C#
一个库帮你轻松的创建漂亮的.NET控制台应用程序
一个库帮你轻松的创建漂亮的.NET控制台应用程序
|
9天前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
21 1
|
9天前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
9天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
9天前
|
机器学习/深度学习 人工智能 Cloud Native
【专栏】洞察.NET 技术的前沿应用
【4月更文挑战第29天】本文探讨了.NET技术的前沿应用,包括.NET Core的跨平台崛起、云原生及AI/机器学习领域的整合。.NET Core支持多平台运行,开源社区的参与促进了其快速发展和性能优化。Xamarin与.NET MAUI助力跨平台移动应用和统一界面开发,而云原生应用借助.NET Core与Azure云服务得以轻松构建和部署。此外,ML.NET和TensorFlow.NET为.NET开发者提供了机器学习和深度学习工具,推动智能应用和边缘计算的创新。.NET技术正持续演进,引领软件开发新趋势。
|
9天前
|
人工智能 物联网 开发者
【专栏】探究.NET 技术的创新应用
【4月更文挑战第29天】本文探讨了.NET技术的最新进展和创新应用,包括.NET 5及后续版本的统一平台、性能提升、跨平台支持、云集成优化和开源社区的贡献。在创新应用场景中,重点介绍了微服务架构、物联网、AI、游戏开发和移动应用。未来,.NET将持续优化性能,深化云原生应用,集成新兴技术,扩大社区生态,并促进相关教育和培训。开发者应把握.NET技术的潜力,积极参与其发展,创造更多创新软件产品。
|
9天前
|
安全 Linux API
【专栏】.NET 开发:打造卓越应用的秘诀
【4月更文挑战第29天】本文介绍了.NET技术的起源、核心特性和应用场景,揭示了其打造卓越应用的秘诀。自2002年推出,.NET历经发展,现支持跨平台,包括.NET Core和.NET 5。其核心特性包括:跨平台兼容性、面向对象编程、内置安全性和高效性能。丰富的类库、强大的开发工具、简洁的语言语法以及活跃的社区支持,使.NET成为构建高效、安全应用的理想选择。随着技术进步,.NET将持续赋能开发者创造更多可能性。
|
9天前
|
人工智能 安全 API
【专栏】理解 .NET 技术,打造优质应用
【4月更文挑战第29天】本文探讨了如何利用.NET技术构建高质量应用程序,介绍了.NET从2002年发展至今的历程,强调其跨平台能力、高效开发、丰富的类库和API、开源生态及安全性等优势。随着.NET 6的规划,平台将更加统一和跨平台,适应云计算、AI等新兴技术。.NET凭借其特性,成为开发者和企业创新的有力工具,未来将继续扮演重要角色。

热门文章

最新文章