三层架构与存储库模式

AT-*_*017 3 sql asp.net-mvc three-tier repository-pattern

我正在尝试在 ASP.NET MVC 项目中使用三层体系结构和存储库模式。但在某些情况下,三层架构和存储库模式看起来几乎相同。所以我尝试研究以下内容以使其更加清晰:

存储库模式

N层架构

在那之后,我进入了以下实现代码,并希望有一些建议以更有效的方式改进实现:

型号- 部门类:

public class Department
{
   public int DepartmentID { get; set; }
   public string Code { get; set; }
   public string DepartmentName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

接口- IRepository 接口:

public interface IRepository
{
   public int Add(Student aStudent); //For Adding Students
   public int Add(Department aDepartment);  //For Adding Departments
} 
Run Code Online (Sandbox Code Playgroud)

DAL - DepartmentGateway 类:

public class DepartmentGateway : IRepository
{
   /****Repository Pattern - Starts****/
   Gateway aGateway = new Gateway();
   public int Add(Department aDepartment)
   {
      aGateway.Query = "INSERT INTO Departments (Code, Name) VALUES (@Code, @Name)";

      aGateway.Command = new SqlCommand(aGateway.Query, aGateway.Connection);

      aGateway.Connection.Open();

      aGateway.Command.Parameters.Clear();
      aGateway.Command.Parameters.Add("Code", SqlDbType.NVarChar);
      aGateway.Command.Parameters["Code"].Value = aDepartment.Code;
      aGateway.Command.Parameters.Add("Name", SqlDbType.NVarChar);
      aGateway.Command.Parameters["Name"].Value = aDepartment.DepartmentName;

      int rowAffected = aGateway.Command.ExecuteNonQuery();

      aGateway.Connection.Close();

      return rowAffected;
   }
   /****Repository Pattern - Ends****/
}
Run Code Online (Sandbox Code Playgroud)

BLL - 部门经理类:

public class DepartmentManager
{
   DepartmentGateway aDepartmentGateway = new DepartmentGateway();

   public int Add(Department aDepartment)
   {
      int affect = aDepartmentGateway.Add(aDepartment);

      if (affect > 0)
      {
         return 1;
      }
      else
      {
         return 0;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我要离开UI部分。我正在努力确保这是否是正确的继续方式并让我知道。谢谢。

注意:我很抱歉问这个问题。我实际上是在混合这两件事,并希望专家提供一些带有代码示例的建议。请不要发布任何链接。我已经看过一些了。

Chr*_*att 5

N-Tier 和存储库模式并不矛盾。事实上,他们真的没有任何关系。N-Tier 只是一种哲学,即您的应用程序应该分层构建。它本质上是关于模块化。存储库模式是关于抽象的,即从应用程序代码中抽象出 SQL 查询。您可以在同一个应用程序中很好地完成这两项工作。

但是,围绕存储库模式存在很多争论。它早于 ORM 并且有一个强有力的论据认为它与 ORM 是多余的。例如,对于实体框架,这DbContext是您的工作单元,每个DbSet都是一个存储库。此时您应该在这里使用的是一种策略模式。您需要一些代表您的数据访问的接口,并且稍后您将使用实现(您的 ORM)来填充它。不过,这确实不会对您的代码产生太大影响,因此主要是语义。请记住,您可能实际上并不想要一个“存储库”,并且您绝对不应该构建您的应用程序,就好像您要为每个实体或其他实体拥有这些实现之一一样。