MVC 接口和存储库差异



我注意到人们同时创建1(接口和2(的代码存储 库。接口列出了所有数据 Crud 操作,存储库实际上定义了数据 Crud 操作。为什么不将它们合并为一个类呢?我听说这是抽象级别的东西?为什么它们在两个不同的地方?我是初学者,所以试图学习分离。谢谢

资源:实现存储库、实现存储库模式

namespace ContosoUniversity.DAL
{
public interface IStudentRepository : IDisposable
{
IEnumerable<Student> GetStudents();
Student GetStudentByID(int studentId);
void InsertStudent(Student student);
void DeleteStudent(int studentID);
void UpdateStudent(Student student);
void Save();
}
}

namespace ContosoUniversity.DAL
{
public class StudentRepository : IStudentRepository, IDisposable
{
private SchoolContext context;
public StudentRepository(SchoolContext context)
{
this.context = context;
}
public IEnumerable<Student> GetStudents()
{
return context.Students.ToList();
}
public Student GetStudentByID(int id)
{
return context.Students.Find(id);
}
public void InsertStudent(Student student)
{
context.Students.Add(student);
}
public void DeleteStudent(int studentID)
{
Student student = context.Students.Find(studentID);
context.Students.Remove(student);
}
public void UpdateStudent(Student student)
{
context.Entry(student).State = EntityState.Modified;
}
public void Save()
{
context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}

通过定义接口,存储库的使用者(可能是控制器类(只需要依赖于接口IStudentRepository并松散耦合。这遵循依赖关系反转原则。您可以从依赖关系注入主题中阅读有关这些概念的更多信息。

它的一个特定用例是,如果有一天您决定更改存储库中 CRUD 操作的实现详细信息,则可以注册此新服务,并且不需要在存储库的使用者端进行任何更改(假设您正在使用依赖注入服务(。

最新更新