当前位置:编程学习 > asp >>

[ASP.NET开发].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()) 
            {&n
补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,