• 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.cnki.net

  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/xugang/p/1044247.html
Copyright © 2020-2023  润新知