关于ASP.NET中经典三层架构的理解

三层架构的理解

经典的三层架构分为BLL,DAL, Model,三层。在使用C#时机编程时,这三层分别作为三个类库来分别编写。三层之间通过添加引用 (using 某类库)建立联系。
具体为:
BLL层引用DAL层以及Modle层

using DAL;
using Model;

public class Bll
{
//some code
} 

DAL层引用Modle层

using Model;

public class DAL
{
//some code
}

Model层处于最底层谁也不引用;

public class Model
{
// some code;
}

下面从下到上说明每一层的作用:

Model层

model层主要作用是声明系统中所有实体。类名大多以实体名命名。
类的内容全部为此对象的一些自实现属性。这些属性反映在数据库中即为一个字段,这些实体即为一张表。
Model层中的定义的实体类是在网页后台代码中按需实例化的,其实例变量也是在网页后台代码中赋值的。比如在网站在注册时可能需要实例化一个Model命名空间下的一个叫的user 对象,user对象的 username 以及 password 字段都是依靠用户的输入来赋值的。上传歌曲的时候则可能需要实例化一个Music对象,music对象的 musicName,musicStyle等对象内的实例变量也都是在上传时由用户进行赋值的。 赋过值的上述对象则会经由BLL层到达DAL层然后在DAL层提取数据进行数据库操作。
或许可以这样说:Model层在三层架构中充当一个信使的作用(因为总是作为其他两层方法的形参)

      public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

DAL层

DAL层负责与数据库的交互。在这一层将复杂的数据库操作代码写入一个方法中,比如,在在线音乐平台的例子里,一个基本的删除操作就需要如下的代码:

  //读取配置文件中的相关节点信息:数据库连接字符串
            string setting = ConfigurationManager.ConnectionStrings["connstring"].ToString();
            //创建数据库对象
            SqlConnection myconn = new SqlConnection(setting);
            //打开连接
            myconn.Open();
            //创建命令对象,并准备好操作数据库的SQL语句
            SqlCommand cmd = new SqlCommand("delect from T_Music where Id=@id", myconn);

            //为SQL语句匹配相关参数,并赋值
            cmd.Parameters.AddWithValue("@id", model.Id);


            //执行相关SQL语句并返回受影响的行数,若受影响行数大于0,则表示执行成功,否者,执行失败
            if (cmd.ExecuteNonQuery() > 0)
            {
                cmd.Dispose();
                myconn.Dispose();
                return true;

            }
            else
            {
                cmd.Dispose();
                myconn.Dispose();
                return false;
            }

在DAL层中,我们就把这些代码封装入一个方法之中,命名为:Delet();,其他的数据库操作同理,这样就为上层提供了一个相对简明的接口。BLL调用这些方法,获取其返回结果。这些结果可以是bool类型,用以单纯表示数据库操作是否成功(增删改);也可以是DataSet类型,用以向BLL层提交具体的数据(查)。Model层在其中的作用就是形参。

//删
  public bool Delete(Model.T_Music model)
        {


            //读取配置文件中的相关节点信息:数据库连接字符串
            string setting = ConfigurationManager.ConnectionStrings["connstring"].ToString();
            //创建数据库对象
            SqlConnection myconn = new SqlConnection(setting);
            //打开连接
            myconn.Open();
            //创建命令对象,并准备好操作数据库的SQL语句
            SqlCommand cmd = new SqlCommand("delect from T_Music where Id=@id", myconn);

            //为SQL语句匹配相关参数,并赋值
            cmd.Parameters.AddWithValue("@id", model.Id);


            //执行相关SQL语句并返回受影响的行数,若受影响行数大于0,则表示执行成功,否者,执行失败
            if (cmd.ExecuteNonQuery() > 0)
            {
                cmd.Dispose();
                myconn.Dispose();
                return true;

            }
            else
            {
                cmd.Dispose();
                myconn.Dispose();
                return false;
            }
        }

//查
  public DataSet Select(int i)
        {
            int j = Convert.ToInt32(i);
            //读取配置文件中的相关节点信息:数据库连接字符串
            string setting = ConfigurationManager.ConnectionStrings["connstring"].ToString();

            SqlConnection myconn = new SqlConnection(setting);

            myconn.Open();

            SqlDataAdapter sda = new SqlDataAdapter("SELECT dbo.T_Music.Id, dbo.T_Music.MusicName, dbo.T_Music.MusicPath,dbo.T_Music.LyricPath FROM dbo.T_Music WHERE dbo.T_Music.Id=" + j + "", myconn);

            DataSet ds = new DataSet();

            sda.Fill(ds, "T_Music");

            sda.Dispose();
            myconn.Dispose();

            return ds;
        }

BLL层

在BLL层中,代码整体看起来要简洁清爽许多,因为它不需要再次编写写复杂的数据库操作代码,这些代码在DAL中已经完成,它只需要调用DAL公开的方法即可(需要生成DAL对象)。对于简单的操作,可以仅仅调用DAL中某一个方法即可。对于一些复杂的查询操作,则需要灵活调用DAL中提供的方法来达到目的。DAL只提供基本的操作,对于更加复杂的操作则可以视作这些基本操作的组合。(当然也可以在DAL中预先定义好)
另外,虽然BLL引用了Model层,然而在BLL层中 Model 并没有生成对象,而只是作为方法的形参来向DAL层传递数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值