在3层架构中使用BAL?如何从DAL调用方法到BAL

cha*_*har 6 c# asp.net n-tier-architecture

我是3层架构的新手,下面是我的DAL代码

public static int Insert(string firstname, string lastname, DateTime dob, string gender,string email, string password)
    {
        // bool flag = false;
        SqlParameter pid;
        SqlParameter result;

        SqlConnection con = Generic.DBConnection.OpenConnection();

        try
        {

            SqlCommand cmd1 = new SqlCommand("Insertreg", con);
            cmd1.CommandType = CommandType.StoredProcedure;
            cmd1.Parameters.AddWithValue("@FirstName", firstname);
            cmd1.Parameters.AddWithValue("@LastName", lastname);
            cmd1.Parameters.AddWithValue("@Dob", dob);
            cmd1.Parameters.AddWithValue("@Gender", gender);
           cmd1.Parameters.AddWithValue("@EmailId", email);
            cmd1.Parameters.AddWithValue("@Password", password);
            result = cmd1.Parameters.Add("@result", System.Data.SqlDbType.Int);
            result.Direction = System.Data.ParameterDirection.Output;
            pid = cmd1.Parameters.Add("@id", System.Data.SqlDbType.Int);
            pid.Direction = System.Data.ParameterDirection.Output;
            return cmd1.ExecuteNonQuery();


            con.Close();

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在BAL中

 public int insert(string firstname,string lastname,DateTime dob,string gender,string email,string password)
    {
      ProfileMasterDAL dal=new ProfileMasterDAL();
      try
      {
          return ProfileMasterDAL.Insert(firstname, lastname, dob, gender,email, password);
      }
      catch (Exception ex)
      {

          throw ex;
      }
        finally
      {
          dal = null;
      }

    }
Run Code Online (Sandbox Code Playgroud)

我的UI

  ProfileMasterBLL pmBLL = new ProfileMasterBLL();
 pmBLL.insert(firstname, lastname, dob, gender, mobile, country, state, email, password);
Run Code Online (Sandbox Code Playgroud)

这是在3层中编码的正确方法吗?我的意思是如何将方法从DAL调用到BAL并进入UI?如果没有建议我一些好方法.谢谢.

Maa*_*ten 6

通常我会做以下事情:

  1. 定义业务层(BL,您将其称为BAL).这包含您的业务实体的定义.它还定义了用于检索/保存/删除您使用的任何模式(存储库,上下文等)的数据的接口.
  2. 定义数据访问层(DAL).这包含了检索/保存/删除接口的实际实现.
  3. 定义UI图层.它包含UI元素(表单,控件,模型,控制器等),可以使用BL加载数据.

参考文献如下:

  1. BL不知道DAL或UI.
  2. DAL知道BL.DAL不知道UI.
  3. UI知道BL.用户界面不知道DAL.

对你来说最大的问题是,当BL不知道DAL时,BL如何检索/保存/删除数据,因此无法在DAL中创建类的实例.好吧,这是一个小依赖注入派上用场的地方.您需要接线的是将DAL类注入BL接口.

希望这是有道理的.我将它用作我的标准3层实现,它绝对没有问题.具体来说,我使用实体框架与POCO实体,我使用的DI是一个自定义的,但任何一个将在那里.

UPDATE

BL不知道DAL.

  • BL定义了一个接口(让我们称之为IRepository),它可以用来做它需要做的事情.
  • DAL定义了一个实现接口IRepository的类(Repository).因此,存储库的实际实现是在DAL中.
  • 显然,BL无法直接创建存储库的实例.这是依赖注入的来源,这允许开发人员创建一个通常无法完成的类的实例.一个简单的原始版本,就是使用反射.

我希望这更有意义.