Реализация CRUD с использованием интерфейса

Каков наилучший подход к реализации CRUD на BL с использованием интерфейса, который будет использоваться для абстрактных операций DAL? Мне нужно ваше мнение, ребята ..

Вот мой черновик ..

Объекты данных, отображаемые в таблице базы данных

 public class Student
 {
    public string StudentId { get; set; }
    public string StudentName { get; set; }
    public Course StudentCourse { get; set; }
 }

 public class Course
 {
    public string CourseCode { get; set; }
    public string CourseDesc { get; set; }
 }

Я создал интерфейс CRUD, чтобы абстрагировать операции объекта

public interface IMaintanable<T>
{
   void Create(T obj);
   T Retrieve(string key);
   void Update(string key);
   void Delete(string key);
 }

А затем компонент, который управляет Сущность и ее операции путем реализации интерфейса

public class StudentManager : IMaintainable<Student>
{
    public void Create(Student obj)
    {
        // inserts record in the DB via DAL
    }

    public Student Retrieve(string userId)
    {
        // retrieveds record from the DB via DAL
    }

    public void Update()
    {
        // should update the record in the DB
    }

    public void Delete(string userId)
    {
        // deletes record from the DB
    }
}

, пример использования

    public void Button_SaveStudent(Event args, object sender)
    {
        Student student = new Student()
        {
           StudentId = "1", StudentName = "Cnillincy"
        }

        new StudentManager().Create(student);   
     }

, как вы можете видеть, в методе обновления довольно много отклонений

    public void Update()
    {
        // should update the record in the DB
    }

. Что должен иметь этот метод для обновления свойства объектов? должен ли я наследовать Student ?

    public class StudentManager : Student , IMaintainable<Student>
    {
        public void Update()
        {
            //update record via DAL
         }
    }


    public void Button_SaveStudent(Event args, object sender)
    {
        Student student = new StudentManager();
        student.StudentId = "1";
        student.StudentName = "Cnillincy"
        student.Update()
    }

Или я должен просто содержать класс Student в качестве атрибута диспетчера студентов?

     public class StudentManager : IMaintainable<Student>
    {
        public Student student { get; private set };

        public void Create() {}
        public void Update() {}
        public void Retrieve() {}
        public void Delete() {}
    }

Что более подходящее? А как насчет интерфейса? Есть еще предложения, ребята? спасибо .. C

11
задан CSharpNoob 21 September 2010 в 15:01
поделиться