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

标签 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;
        }
    }

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;
      }

    }

我的界面

  ProfileMasterBLL pmBLL = new ProfileMasterBLL();
 pmBLL.insert(firstname, lastname, dob, gender, mobile, country, state, email, password);

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

最佳答案

通常我会执行以下操作:

  1. 定义一个业务层(BL,你称之为 BAL)。这包含您的业务实体的定义。它还为您使用的任何模式(存储库、上下文等)定义了检索/保存/删除数据的接口(interface)。
  2. 定义数据访问层 (DAL)。这包含检索/保存/删除接口(interface)的实际实现。
  3. 定义一个用户界面层。这包含可以使用 BL 加载数据的 UI 元素(表单、控件、模型、 Controller 等)。

引用文献如下:

  1. BL 不知道 DAL 或 UI。
  2. DAL 知道 BL。 DAL 不知道 UI。
  3. UI 知道 BL。 UI 不知道 DAL。

对您来说最大的问题可能是,当 BL 不知道 DAL 时如何检索/保存/删除数据,因此无法在 DAL 中创建类的实例。好吧,这就是一点Dependency Injection派上用场。您所要做的就是将 DAL 类注入(inject) BL 接口(interface)。

希望这是有道理的。我将它用作我的标准 3 层实现,它绝对没有问题。具体来说,我使用 Entity Framework with POCO对于实体,我使用的 DI 是自定义的,但是 any of the ones out there会做的。

更新

BL 不知道 DAL。

  • BL 定义了一个接口(interface)(我们称之为 IRepository),它可以使用它来做它需要做的事情。
  • DAL 定义了一个实现接口(interface) IRepository 的类 (Repository)。所以存储库的实际实现是在 DAL 中。
  • 显然 BL 不能直接创建存储库的实例。这就是依赖注入(inject)的用武之地,它允许开发人员创建通常无法完成的类的实例。一个简单粗暴的版本,就是使用 reflection .

我希望这更有意义。

关于c# - BAL在3层架构中的使用?如何从DAL调用方法到BAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214371/

相关文章:

c# - MySQL 的 LAST_INSERT_ID() 问题

c# - 文件名未传递给 main

asp.net - 当单选按钮运行在 ="server"时,用 jQuery 检查单选按钮?

java - 如何在 3 层架构中组织依赖关系

c# - 如何从 Foreach 循环中的 IList 更新记录?

c# - 如何将附加参数传递给谓词函数?

asp.net - 当控件为 runat=server 时如何应用 CSS id?

c# - 使用 Cookie 的购物车

software-design - 在洋葱、六边形或简洁架构中,域模型是否可以包含与数据库中的域模型不同的属性?

c# - 从数据库中检索属性的简单类型的创建模式?