我正在尝试在ASP.NET MVC项目中使用三层体系结构和存储库模式。但在某些情况下,三层体系结构和存储库模式看起来几乎相同。所以我试着研究以下内容以使其更清晰:
之后,我将进入以下代码进行实现,并期望一些建议以更有效的方式改进实现:
模型 - 部门类:
public class Department
{
public int DepartmentID { get; set; }
public string Code { get; set; }
public string DepartmentName { get; set; }
}
接口 - IRepository接口:
public interface IRepository
{
public int Add(Student aStudent); //For Adding Students
public int Add(Department aDepartment); //For Adding Departments
}
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****/
}
BLL - DepartmentManager类:
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;
}
}
}
我要离开 UI 部分。我想确保这是否是正确的方式继续让我知道。感谢。
注意:我道歉地问这个问题。我实际上正在混合这两件事,并希望专家提供一些代码示例的建议。请不要发布任何链接。我已经看过一些了。
答案 0 :(得分:3)
N-Tier和存储库模式并不矛盾。事实上,他们真的没有任何关系。 N-Tier只是一种理念,您的应用程序应该分层构建。它主要是关于模块化的。存储库模式是关于抽象的,即从应用程序代码中抽象出SQL查询。你可以在同一个应用程序中两个。
但是,存储库模式存在很多争议。它早于ORM,并且有一个强有力的论据可以让它成为ORM的冗余。例如,使用实体框架,DbContext
是您的工作单元,每个DbSet
都是一个存储库。此时你应该利用的是一种战略模式。您需要一些代表您的数据访问权限的界面,并且您将在以后使用实现(您的ORM)填写它。但是,这在很大程度上并不影响你的代码,所以它主要是语义。请记住,您可能实际上并不想要一个"存储库",您绝对不应该构建您的应用程序,就好像您将要执行其中一个实现实体等。