对于三层架构来说,就是使用类,把我们在做项目的过程中,具有共同性质的一些对象抽象出来。当然了,这也是面向对象的一部分。其中的三层所指的就是:①实 体层②数据库访问层③业务逻辑层。当然了,所有的这三个层来说,最终都是为一个层服务的,就是所谓的视图层,但是为什么不叫四层架构…原因我也不知道,可 能是视图层仅仅是完成了对业务逻辑层的一些调用,是经常的变化的,可以根据需要自己编写。而其它三个层,如果搭建完后,可以作为框架来使用的。
1)首先还是先来介绍一下实体层吧,就是我们通常所说的Entity
实体就是我们在开发项目过程中所要涉及的一些对象。把这些所要涉及的对象(如:新闻名称,新闻上传时间,供稿人,上传文件的名称等),都抽象成一个类。使用封装字段方法,我们可以在视图层通(主要是视图层)过实例化对象的方法,来给我们的对象的属性赋值。
简单的看一段代码吧,可能会能够更加的清楚,明白
public class NewsModel
{
//新闻编号
private int nNewsId;
public int NNewsId
{
get { return nNewsId; }
set { nNewsId = value; }
}
//新闻名称
private string strNewsName;
public string StrNewsName
{
get { return strNewsName; }
set { strNewsName = value; }
}
}
这里的NewsModel就是一个关于新闻的实体类,其中声明了两个private的属性字段(一定要是private,防止非法赋值),使用public的构造函数,可以在外部给字段赋值。
下面的就是在视图层来实例化对象,根据需要来给字段赋值,看下面的一段代码:
NewsModel newModel = new NewsModel();
newModel.StrNewsName = this.TextBox1.Text;
当然了,这仅仅是一段代码,其中并没有给字段nNewsId赋值,因为我把它作为数据库的id地段,已经设置成自动增长。这样,就完成了视图层对实体层的调用。
2)数据库访问层
数据库库访问层,顾名思义,就是主要来完成对数据库的访问,等一系类的对数据库操作的类。为什么要单独的把对数据库的操作抽象成一个单独的类,我个人理 解是因为在整个项目的开发过程中,不仅仅需要一次访问数据库,而是需要多次,如果每次都编写数据库访问代码的话,会增加程序员的个人工作量,而且对于代码 的易用性和简洁性来说肯定是非常糟糕的。当然来可能还有其它的一些优点,我暂时还没有发现。
既然是对数据库的操作类,而且对数据库的操作,无非就是四种:增删改查。所以一个能提供增删改查的通用类是必不可少的。这就是我们经常所说的,通用数据库访问类(很多的程序员都喜欢把这个类命名为SqlHelper,既然是名字,都是可以随意起的,只要不违反C#语法命名规范,当然这样命名也是有好处,就是可以使其他程序员根据类的名称,大概判断出这个类是要干什么的)。
当然了,我这次做自己项目的时候,所写的数据库访问类就没有我上次看周金桥老师的书,然后模仿写的数据库访问类那么的复杂了(《【ASP.NET开发】 ASP.NET对SQLServer的通用数据库访问类》)。当然了,我这里的数据库访问类,主要还是为了简介,和易用,只要满足我自己当前项目的需要就 可以了,不是每做一个项目,都要写一个功能全面的数据库访问类。
代码如下,请大家参考,更喜欢哪个访问类,自己可以根据自己口味,或者需要,直接用也可以:
/// <summary>
///创建一个SqlHelper的数据库访问通用类,完成对数据库的所有操作
/// </summary>
public class SqlHelper
{
//定义数据库的连接字符串
private static readonly string connectionString = ConfigurationManager.ConnectionStrings["strConnectionString"].ConnectionString;
/// <summary>
/// 创建方法,完成对数据库的非查询的操作
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">传入的参数</param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
string str = sql;
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 完成查询的结果值
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">传入的参数数组</param>
/// <returns></returns>
public static int ExecuteScalar(string sql, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
return Convert.ToInt32( cmd.ExecuteScalar());
}
}
}
/// <summary>
/// 主要执行查询操作
/// </summary>
/// <param name="sql">执行的sql语句</param>
/// <param name="parameters">参数数组</param>
/// <returns></returns>
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
}
发表回复