asp.net 2.0 三层架构的实现(最最原始,简单,一般, 但不平凡)用通俗的语言说出难以理解的。。。

来源:互联网 发布:win7重启后数据不对 编辑:程序博客网 时间:2024/05/12 11:10

《1》 第一层     表示层 用通俗的语言就是 UI 界面, 再通俗点就是我们平时上网时看到的界面。

《2》 第二层    业务逻辑层 ,,,说白了 ,就是 一个类 ,该类利用下边一层 ( 数据访问层 的方法返回的结果   DataSet    ) 把 各个数据对象分解,再 从新 以更小的对象存储起来 (更加的有机体)

等待上层的应用。

《3》 第三层   数据访问曾 。 该层说白了也是一个类 。 该类 其实是把数据库里的 数据 用该类的方法( 以sql查询为核心)   执行。 (   SRUD );

 

下面给出示例代码:  

界面:

web.congfig

数据访问层代码:

using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

public class AuthorDB
{
     //构造函数
     public AuthorDB()
     { }

     //获取state集合。返回DataSet,并通过DropDownList显示
     public static DataSet GetStates()
     {
         //获取连接字符串
         string connectionString = ConfigurationManager.ConnectionStrings["PubsConnectionString"].ConnectionString;
         //创建并设置SqlConnection
         SqlConnection dbConnection = new SqlConnection(connectionString);
         //定义SQL查询语句
         string queryString = "Select distinct state from authors";
         //创建并设置SqlCommand
         SqlCommand dbCommand = new SqlCommand();
         dbCommand.Connection = dbConnection;
         dbCommand.CommandType = CommandType.Text;
         dbCommand.CommandText = queryString;
         //创建SqlDataAdapter,并获取数据
         SqlDataAdapter dataAdapter = new SqlDataAdapter(dbCommand);
         DataSet ds = new DataSet();
         dataAdapter.Fill(ds);
         //返回数据
         return ds;
     }

     // 根据state参数,获取数据记录。返回DataSet,并通过GridView显示
     public static DataSet GetAuthorsByState(string state)
     {
         //获取连接字符串
         string connectionString = ConfigurationManager.ConnectionStrings["PubsConnectionString"].ConnectionString;
         //创建并设置SqlConnection
         SqlConnection dbConnection = new SqlConnection(connectionString);
         //定义SQL查询语句
         string queryString = "Select au_id,au_lname,au_fname,state from authors where
state=@state";
         //创建并设置SqlCommand
         SqlCommand dbCommand = new SqlCommand();
         dbCommand.Connection = dbConnection;
         dbCommand.CommandType = CommandType.Text;
         dbCommand.CommandText = queryString;
         //设置SqlParameter
         SqlParameter dbParameter_state = new SqlParameter();
         dbParameter_state.ParameterName = "@state";
         dbParameter_state.Value = state;
         dbParameter_state.DbType = DbType.StringFixedLength;
         //向SqlCommmand中添加SqlParameter
         dbCommand.Parameters.Add(dbParameter_state);
         //创建SqlDataAdapter,并获取数据
         SqlDataAdapter dataAdapter = new SqlDataAdapter(dbCommand);
         DataSet ds = new DataSet();
         dataAdapter.Fill(ds);
         //返回数据
         return ds;
     }

     //更新数据记录
     public static int UpdateAuthor(string au_id, string au_lname, string au_fname, string state)
     {
         //获取连接字符串
         string connectionString = ConfigurationManager.ConnectionStrings["PubsConnectionString"].ConnectionString;
        
         //创建并设置SqlConnection
         SqlConnection dbConnection = new SqlConnection(connectionString);
        
         //定义SQL查询语句
         string queryString = "UPDATE authors SET
au_fname=@au_fname, au_lname=@au_lname, state=@state WHERE au_id = @au_id";
       
         //创建并设置SqlCommand
         SqlCommand dbCommand = new SqlCommand();
         dbCommand.Connection = dbConnection;
         dbCommand.CommandType = CommandType.Text;
         dbCommand.CommandText = queryString;

         //设置参数@au_id
         SqlParameter dbParameter_au_id = new SqlParameter();
         dbParameter_au_id.ParameterName = "@au_id";
         dbParameter_au_id.Value = au_id;
         dbParameter_au_id.DbType = DbType.String;
         //向SqlCommmand中添加@au_id
         dbCommand.Parameters.Add(dbParameter_au_id);

         //设置参数@au_lname
         SqlParameter dbParameter_au_lname = new SqlParameter();
         dbParameter_au_lname.ParameterName = "@au_lname";
         dbParameter_au_lname.Value = au_lname;
         dbParameter_au_lname.DbType = DbType.String;
         //向SqlCommmand中添加@au_lname
         dbCommand.Parameters.Add(dbParameter_au_lname);

         //设置参数@au_fname
         SqlParameter dbParameter_au_fname = new SqlParameter();
         dbParameter_au_fname.ParameterName = "@au_fname";
         dbParameter_au_fname.Value = au_fname;
         dbParameter_au_fname.DbType = DbType.String;
         //向SqlCommmand中添加@au_fname
         dbCommand.Parameters.Add(dbParameter_au_fname);

         //设置参数@state
         SqlParameter dbParameter_state = new SqlParameter();
         dbParameter_state.ParameterName = "@state";
         dbParameter_state.Value = state;
         dbParameter_state.DbType = DbType.StringFixedLength;
         //向SqlCommmand中添加@state
         dbCommand.Parameters.Add(dbParameter_state);

         //执行SQL语句,并且返回受影响的行数
         int rowsAffected = 0;
         dbConnection.Open();
         try
         {
             rowsAffected = dbCommand.ExecuteNonQuery();
         }
         finally
         {
             dbConnection.Close();
         }
         return rowsAffected;
     }
}

业务实体类代码:

using System;

public class Author
{
     #region 定义私有字段
     private string _id;
     private string _firstname;
     private string _lastName;
     private string _state;
     #endregion

     #region 定义属性
     //定义属性ID
     public string ID
     {
         get
         {
             return _id;
         }
         set
         {
             _id = value;
         }
     }

     //定义属性FirstName
     public string FirstName
     {
         get
         {
             return _firstname;
         }
         set
         {
             _firstname = value;
         }
     }

     //定义属性LastName
     public string LastName
     {
         get
         {
             return _lastName;
         }
         set
         {
             _lastName = value;
         }
     }

     //定义属性State
     public string State
     {
         get
         {
             return _state;
         }
         set
         {
             _state = value;
         }
     }
     #endregion

     #region 定义构造函数
     //定义构造函数1
     public Author()
     {
     }
     //定义构造函数2
     public Author(string id, string lastname, string firstname, string state)
     {
         this.ID = id;
         this.FirstName = firstname;
         this.LastName = lastname;
         this.State = state;
     }
     #endregion
}

业务逻辑类代码:

using System;
using System.Data;
using System.Collections.Generic;

public class AuthorsComponent
{
     #region 定义构造函数
     public AuthorsComponent()
     {
     }
     #endregion

     #region 实现方法
     //根据参数state和sortExpression,实现获取Author对象集合并对其排序
     public List<Author> GetAuthorsByState(string state, string sortExpression)
     {
         //初始化Author对象集合实例
         List<Author> authors = new List<Author>();
         //从数据访问层获取DataSet类型返回数据
         DataSet ds = AuthorDB.GetAuthorsByState(state);
         //使用返回数据填充Author对象集合
         foreach (DataRow row in ds.Tables[0].Rows)
         {
             authors.Add(new Author((string)row["au_id"], (string)row["au_lname"], (string)row["au_fname"], (string)row["state"]));
         }
         //实现自定义排序
         authors.Sort(new AuthorComparer(sortExpression));
         //返回Author对象集合
         return authors;
     }
    
     //实现参数为Author对象时,数据的更新方法
     public int UpdateAuthor(Author a)
     {
         //调用数据访问层静态方法
         return AuthorDB.UpdateAuthor(a.ID, a.LastName, a.FirstName, a.State);
     }

     //实现参数为值类型时,数据的更新方法
     public int UpdateAuthor(string ID, string LastName, string FirstName, string State)
     {
         //调用数据访问层静态方法
         return AuthorDB.UpdateAuthor(ID, LastName, FirstName, State);
     }   

     //获取返回值为泛型的地区名集合
     public List<String> GetStates()
     {
         //初始化泛型对象实例
         List<String> states = new List<string>();
         //从数据访问层获取DataSet类型的地区名集合
         DataSet ds = AuthorDB.GetStates();
         //填充泛型对象
         foreach (DataRow row in ds.Tables[0].Rows)
         {
             states.Add((String)row["state"]);
         }
         //返回泛型对象
         return states;
     }
     #endregion
}

//实现自定义排序,该类实现泛型的IComparer接口
public class AuthorComparer : IComparer<Author>
{
     private string _sortColumn;
     private bool _reverse;

     //自定义构造函数
     public AuthorComparer(string sortExpression)
     {
         _reverse = sortExpression.ToLowerInvariant().EndsWith(" desc");
         if (_reverse)
         {
             _sortColumn = sortExpression.Substring(0, sortExpression.Length - 5);
         }
         else
         {
             _sortColumn = sortExpression;
         }
     }

     //实现接口定义的Compare方法,比较两个Author对象实例
     public int Compare(Author a, Author b)
     {
         int retVal = 0;
         switch (_sortColumn)
         {
             case "ID":
                 retVal = String.Compare(a.ID, b.ID, StringComparison.InvariantCultureIgnoreCase);
                 break;
             case "FirstName":
                 retVal = String.Compare(a.FirstName, b.FirstName, StringComparison.InvariantCultureIgnoreCase);
                 break;
             case "LastName":
                 retVal = String.Compare(a.LastName, b.LastName, StringComparison.InvariantCultureIgnoreCase);
                 break;
             case "State":
                 retVal = String.Compare(a.State, b.State, StringComparison.InvariantCultureIgnoreCase);
                 break;
         }
         return (retVal * (_reverse ? -1 : 1));
     }
}


OK   三层架构完成!!