Разница в интерфейсе MVC и хранилище - PullRequest
0 голосов
/ 08 мая 2018

Я замечаю код, в котором люди создают 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);
        }
    }
}

1 Ответ

0 голосов
/ 08 мая 2018

Определяя интерфейс, потребитель вашего репозитория, который может быть классом Controller, должен зависеть только от вашего интерфейса IStudentRepository и быть слабо связанным .Это следует принципу обращения зависимостей .Вы можете прочитать больше об этих понятиях в теме Внедрение зависимостей .

Конкретный вариант использования для этого заключается в том, что если однажды вы решите изменить детали реализации операций CRUD в вашемхранилище, вы можете зарегистрировать этот новый сервис и не требовать каких-либо изменений на стороне потребителя вашего хранилища (при условии, что вы используете сервис внедрения зависимостей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...