¿Cuál es el mejor enfoque para implementar un CRUD en la interfaz de uso de BL que se utilizará para abstraer las operaciones DAL? Necesito sus chicos de opinión ..Implementación de un CRUD utilizando una interfaz
Aquí es mi proyecto ..
entidades de datos que se asignan en la tabla de base de datos
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; }
}
creé una interfaz CRUD para las operaciones del objeto abstracto
public interface IMaintanable<T>
{
void Create(T obj);
T Retrieve(string key);
void Update(string key);
void Delete(string key);
}
Y luego un componente que gestiona la entidad y sus operaciones implementando la interfaz
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
}
}
ejemplos de uso
public void Button_SaveStudent(Event args, object sender)
{
Student student = new Student()
{
StudentId = "1", StudentName = "Cnillincy"
}
new StudentManager().Create(student);
}
como se puede ver, no es un gran anomalías en el método de actualización
public void Update()
{
// should update the record in the DB
}
lo que debe tener este método para actualizar la propiedad objetos? ¿Debo heredar el 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()
}
¿O debería contener la clase de Estudiante como un atributo del administrador de estudiantes?
public class StudentManager : IMaintainable<Student>
{
public Student student { get; private set };
public void Create() {}
public void Update() {}
public void Retrieve() {}
public void Delete() {}
}
¿Qué más apropiado? ¿Qué pasa con la interfaz? Alguna otra sugerencia chicos? thanks..C
cree que es más eficiente que heredar el objeto, porque significa que creará otra copia del obj en lugar de simplemente actualizarlo ,, – CSharpNoob
Heredar no tendría sentido. Su StudentManager NO ES un estudiante. – Matthieu
Lo que dijo Matthieu. Piense en el alumno como un registro y su StudentManager como la secretaria del director, escribiendo los registros a medida que aparecen. Principio de responsabilidad única FTW. – Lunivore