首页 >> 编程知识

三层架构之数据层DAL(Data Access Layer)[数据分离]、网站结构、表现和行为的三者分离[W3C倡导]

三层架构之数据层DAL(Data Access Layer)[数据分离]



三层架构数据层DAL(Data Access Layer)[数据分离]

using System.Data;
using System.Data.SqlClient;
 
namespace Dal
{
     ///<summary>
     ///数据处理类。
     ///</summary>
     public class DataClass
     {
         public static SqlConnection con = new SqlConnection();
         private static SqlCommand cmd = new SqlCommand();
 
         public DataClass(string conStr)
         {
              con.ConnectionString = conStr;
         }
 
         ///<summary>
         ///打开数据库连接。
         ///</summary>
         public void OpenConnection()
         {
              if(con.State!=ConnectionState.Open)
              {
                   con.Open();
              }
         }
 
         ///<summary>
         ///关闭与数据库的连接。
          ///</summary>
         public void CloseConnection()
         {
              con.Close();
         }
 
         private static void PrepareCommand(string procName,SqlTransaction trans,SqlParameter[] parms)
         {
              cmd.Connection = con;
              cmd.CommandText = procName;
              if(trans != null)
                   cmd.Transaction = trans;
              cmd.CommandType = CommandType.StoredProcedure;
              if(parms!=null)
              {
                   foreach (SqlParameter parm in parms)
                       cmd.Parameters.Add(parm);
              }
         }
 
         #region 执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行,ExecuteScalar。
         ///<summary>
         ///执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<returns>ExecuteScalar</returns>
         public object cmdExecScalarProc(string procName,SqlParameter[] parms)
         {
              object obj = new object();
              PrepareCommand(procName,null,parms);
              OpenConnection();
              obj = cmd.ExecuteScalar();
              CloseConnection();
              cmd.Parameters.Clear();
              return obj;
         }
 
         ///<summary>
         ///执行查询,并返回查询所返回的结果集中第一行的第一列,忽略额外的列或行。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
         ///<returns>ExecuteScalar</returns>
         public object cmdExecScalarProc(string procName,SqlParameter[] parms,SqlTransaction trans)
         {
              object obj = new object();
              PrepareCommand(procName,trans,parms);
              OpenConnection();
              obj = cmd.ExecuteScalar();
              CloseConnection();
              cmd.Parameters.Clear();
              return obj;
         }
         #endregion
 
         #region 对连接执行 Transact-SQL 语句,ExecuteNonQuery。
         ///<summary>
         ///对连接执行 Transact-SQL 语句。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         public void cmdExecNonQueryProc(string procName,SqlParameter[] parms)
         {
              PrepareCommand(procName,null,parms);
              OpenConnection();
              cmd.ExecuteNonQuery();
              CloseConnection();
              cmd.Parameters.Clear();
         }
 
         ///<summary>
         ///对连接执行 Transact-SQL 语句。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
         public void cmdExecNonQueryProc(string procName,SqlParameter[] parms,SqlTransaction trans)
         {
              PrepareCommand(procName,trans,parms);
              OpenConnection();
              cmd.ExecuteNonQuery();
              CloseConnection();
              cmd.Parameters.Clear();
         }
         #endregion
 
         #region 返回SqlDataReader。
         ///<summary>
         ///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<returns>SqlDataReader对象</returns>
         public SqlDataReader DataReader(string procName)
         {
              SqlDataReader dr = null;
              PrepareCommand(procName,null,null);
              OpenConnection();
              dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
              return dr ;
         }
 
         ///<summary>
         ///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<returns>SqlDataReader对象</returns>
         public SqlDataReader DataReader(string procName,SqlParameter[] parms)
         {
              SqlDataReader dr = null;
              PrepareCommand(procName,null,parms);
              OpenConnection();
              dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
              cmd.Parameters.Clear();
              return dr ;
         }
 
         ///<summary>
         ///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
         ///<returns>SqlDataReader对象</returns>
         public SqlDataReader DataReader(string procName,SqlTransaction trans)
         {
              SqlDataReader dr = null;
              PrepareCommand(procName,trans,null);
              OpenConnection();
              dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
              return dr ;
         }
 
         ///<summary>
         ///返回SqlDataReader,在使用后请关闭本对象,同时将自动调用CloseConnection()来关闭数据库连接。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<param name="trans">SQL Server 数据库中处理的 Transact-SQL 事务</param>
         ///<returns>SqlDataReader对象</returns>
         public SqlDataReader DataReader(string procName,SqlParameter[] parms,SqlTransaction trans)
         {
              SqlDataReader dr = null;
              PrepareCommand(procName,trans,parms);
              OpenConnection();
              dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
              cmd.Parameters.Clear();
              return dr ;
         }
         #endregion
 
         #region 返回内存数据中的一个表,DataTable。
         ///<summary>
         ///返回内存数据中的一个表。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<returns>DataTable</returns>
         public DataTable dt(string procName)
         {
              SqlDataAdapter da = new SqlDataAdapter(procName,con);
              da.SelectCommand.CommandType = CommandType.StoredProcedure;
              DataTable dt = new DataTable();
              da.Fill(dt);                
              return dt;
         }
 
         ///<summary>
         ///返回内存数据中的一个表。
         ///</summary>
         ///<param name="procName">存储过程</param>
         ///<param name="parms">SqlParameter数组</param>
         ///<returns>DataTable</returns>
         public DataTable dt(string procName,SqlParameter[] parms)
         {
              SqlDataAdapter da = new SqlDataAdapter(procName,con);
              da.SelectCommand.CommandType = CommandType.StoredProcedure;
              DataTable dt = new DataTable();
              for(int i = 0;i < parms.Length;i++)
              {
                   da.SelectCommand.Parameters.Add(parms[i]);
              }
              da.Fill(dt);
              cmd.Parameters.Clear();
              return dt;
         }
         #endregion
     }
}

本文不断更新中……
网站性能优化
》网站结构、表现和行为



网站结构、表现和行为的三者分离[W3C倡导]



结构、表现和行为的三者分离

web标准的一个重要的思想就是表现和结构分离,以前我一直误解了,以为web标准就是简单的用div替代tabel;不使用描述性的标签混杂在网页结构中,而用CSS样式表来表示,使表现和 结构分离。原来这都是表面的理解,应该说,结构重在语义,要使用结构化语言来梳理网页结构,当然不是简单的整理,而是有实际意义的,定义尽可能”人性化“。每一个“骨架”都要有意义,例如将网页分成若干个区域,网页LOGO、标题、内容、导航菜单、版权说明等等,这些都是必须有意义的,说白了不是用div布局,而是用div结构化。
  这使我联想到用在图片img标签中的alt属性,以前我们通常都是忽略的,或者用毫无意义的说明文字代替图片,又或者是一大堆又长又臭的描述文字……如果必要我们应该简练地描述,毫无相关的就用留空它,但不是忽略不写。

网页要表达的内容就是信息,比如你要呈现的文字、图片、多媒体等信息,结构就是这些内容的方式,表现就是CSS,行为就是DOM,JavaScript等。

所以通俗点说,HTML就是结构。

由于HTML的开放性,结构可以有很多种,最终呈现在用户面前同样的内容,其HTML结构却可以多种多样,而好的HTML是“结构化”的,也就是有条理的,基于语义的。比如p 表示一个段落,h3 表示一个三级标题,address 表示一个地址等等。而以前用table布局很大程度上破坏了这种语义的要求,充斥在整篇文档中的table,tr,td标签就不是结构化的,他们的出现是没有意义的,纯粹是为了布局的需要。类似的还有font ,b 标签等,这些都是没有结构意义而纯粹为了样式而存在的标签。

现在提倡的HTML写法是标签要言之有物,不要词不达意,也就是用什么和怎么用的问题。比如b就属于不该用的标签,因为它不表示任何结构,我们不知道它里面是什么东西,只知道它表示“加粗”,但加粗是CSS也就是表现层面的东西,这属于“言之无物”。而如果将一个本是标题的内容用p 括起来也是非结构化的,这属于“词不达意”。

关于div(以及span ),它是一个没有特定意义只有普适意义的标签,表示一个区域。因为HTML中具有特定意义的标签实在是太少了(所以W3C主张从HTML向XML过渡),我们某些情况下只有配合使用div ,span 等标签和id,class等属性来组织一个特定的内容。所以我觉得divspan 都是比较尴尬的标签,只能算是半语义的,只是由于HTML的局限,我们不得不大量的使用他们。

W3C提倡结构、表现、行为三者分离,任何一个层面的改变都不应当依赖其他层面。这是一种很好的思想,不过在目前技术局限的情况下这还是一种理想状态,因为无论是HTML,CSS,DOM等规范还是浏览器的支持等都还不完善,至少是不足以支撑这种思想,我们所能做的只是尽力如此了。

畅想一下未来这种理想的三者分离的状况下做网站,需求通过一系列沟通将转变为一个结构化文档(比如XML),同时到达前台和后台,然后两者一起开发,互不干扰。前台美工负责出设计图并和客户沟通,定稿后然后通过CSS和结构化文档整合,后台程序员则直接按需求做功能模块,最后前台后台无缝整合……


三层架构之数据层DAL(Data Access Layer)[数据分离]、网站结构、表现和行为的三者分离[W3C倡导](本文完毕)
下一篇:构造函数和析构函数的原理及在C#中的运用
上一篇:Asp.net网站性能优化总结[C#为例]