.NET三层架构简单解析

对于三层架构来说,就是使用类,把我们在做项目的过程中,具有共同性质的一些对象抽象出来。当然了,这也是面向对象的一部分。其中的三层所指的就是:①实 体层②数据库访问层③业务逻辑层。当然了,所有的这三个层来说,最终都是为一个层服务的,就是所谓的视图层,但是为什么不叫四层架构…原因我也不知道,可 能是视图层仅仅是完成了对业务逻辑层的一些调用,是经常的变化的,可以根据需要自己编写。而其它三个层,如果搭建完后,可以作为框架来使用的。
  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;
  }
  }
  }
  }

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Grow your business fast with

Suku