J'ai deux entités User et Course. Un utilisateur peut suivre plusieurs cours, ce qui rend la relation un à plusieurs. Mais un seul cours peut être pris par de nombreux étudiants, ce qui en fait de nombreuses relations.Question de conception pilotée par domaine sur les services et les dépôts
Maintenant, je dois enregistrer un cours pour un utilisateur. Mon entité utilisateur a:
public void AddCourse(Course course)
{
if (CoursesAlreadyAdded(course))
{
AddBrokenRule(new BrokenRule() { PropertyName = course.ClassCode, Message = String.Format("Course with classCode = {0} already added", course.ClassCode) });
return;
}
UserCourses.Add(new UserCourse() { UserId = this.UserId, CourseId = course.CourseId, Course= course, User = this});
}
Les classes sont générées via Linq to SQL. Linq to sql n'est pas capable d'effectuer plusieurs à plusieurs relations donc je dois le gérer moi-même.
Maintenant, la question est de savoir comment vais-je envoyer les informations à la base de données. Should UserRepository.Save (utilisateur) devrait être responsable de l'enregistrement des cours. Cela signifie que l'utilisateur est la racine agrégée de l'entité du cours mais en réalité ce n'est pas parce que je peux accéder au cours de nombreuses façons différentes et je ne suis pas dépendant de l'objet Utilisateur pour me fournir un cours.
Même si j'ai un CourseRegistrationService (que j'ai), je dois appeler un référentiel pour conserver les changements. Le référentiel est responsable de la persistance des modifications sur les relations utilisateur et cours. Peut-être un UserCourseRepository !! De plus, en plaçant un objet List sous User, l'utilisateur devient une racine agrégée ou est incorrecte. Si c'est le cas, comment concevez-vous l'application en utilisant OR MAPPERS qui génère List et une à plusieurs relations automatiquement.
Il semble que le modèle de données soit déjà défini, mais il me semble que vous pourriez vous épargner quelques maux de tête en évitant la relation plusieurs-à-plusieurs en réifiant la table de jointure en tant que modèle Registrations. –
@Thom, pas sûr de ce que tu voulais dire! Peux-tu élaborer! – azamsharp
Fondamentalement ce que la réponse acceptée a dit. –