Каков наилучший подход для реализации CRUD на BL с использованием интерфейса, который будет использоваться для абстрагирования операций DAL? Мне нужны ваши ребята мнение ..Реализация CRUD с использованием интерфейса
Вот мой проект ..
объектов данных, которые отображаются в таблице базы данных
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
}
, что должен этот метод должен обновить свойство объектов? должен ли я наследовать Студент?
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()
}
Или должен ли я просто содержать класс Студента как атрибут студенческого менеджера?
public class StudentManager : IMaintainable<Student>
{
public Student student { get; private set };
public void Create() {}
public void Update() {}
public void Retrieve() {}
public void Delete() {}
}
Что более подходит? Как насчет интерфейса? Любые другие предложения? thanks..C
Вы считаете, что это более эффективно, чем наследование объекта, потому что это означает, что вы создадите другую копию obj вместо того, чтобы просто обновлять ее. – CSharpNoob
Наследование не имеет смысла. Ваш StudentManager НЕ является студентом. – Matthieu
Что сказал Маттие. Подумайте о студенте, как о записи, и о вашем студенческом менеджере, таком как секретарь директора, набрав записи, когда они входят. Принцип единой ответственности FTW. – Lunivore