Supponiamo di avere la seguente classe:
public class Course {
// data
public string Name { get; }
public List<Student> Students {get;}
//...
// logic
public int AverageGrade() {/* do something*/}
public bool ReachedMaxStudents(){/* do something */}
}
Ho alcune operazioni che interagiscono con il database come l'inserimento di uno studente in una classe (dovrebbe essere fatto anche nel database). Qual è l'approccio migliore a questo?
Primo approccio: lo sviluppatore deve conoscere l'ID del corso e passarlo al repository.
public class CourseRepository : ICourseRepository{
public void InsertStudent(int CourseId, StudentDto student){
/* do something */
}
}
Secondo approccio: repository incorporato all'interno dell'oggetto dominio:
public class Course {
private ICourseRepository _repo;
// data
public string Name { get; }
public List<Student> Students {get;}
//...
// logic
public int AverageGrade() {/* do something*/}
public bool ReachedMaxStudents(){/* do something */}
public void AddStudent(Student student){
StudentDto s = /* map Student to Studentdto */
_repo.Insert(s);
}
}
Quali sono i pro e i contro per ciascun approccio e quale è il preferito?