Quelqu'un peut-il m'aider à comprendre comment modéliser au mieux une relation de composition?Comment modélisez-vous une relation de composition simple?
Si, par exemple, j'ai un étudiant qui peut avoir de nombreux programmes, je créerais à peu près:
class Student
{
prop long Pk { get; set; }
prop string Name { get; set; }
prop List<Schedule> Schedules { get; set; }
}
class Schedule
{
prop string Semester { get; set; }
prop List<Course> Courses{ get; set; }
}
Quelque part en bas de la ligne, je peux avoir un objet annexe, et souhaiterai identifier quel étudiant il appartient à . Je veux être en mesure d'écrire Schedule.Student.Name
, et recevoir le nom de l'étudiant en retour. Est-ce que j'ajoute également une propriété Student à mon objet Schedule?
Mon application a transmis un objet Student Pk à mon objet Schedule afin de réaliser la fonctionnalité CRUD. Je garde la Student PK en tant que variable privée afin de garder le contrôle sur elle si j'en ai besoin. Au fur et à mesure que mon application devient plus complexe, j'ai du mal à maintenir ce que je fais. Quelles sont vos suggestions pour moi? Quoi d'autre puis-je consulter (livres/liens) pour obtenir un rappel et mieux gérer ces fondamentaux?
Mais si j'ajoute une propriété d'étudiant à ma propriété annexe, ce qui est me empêche de faire ceci: Student.Schedules [0] .Student.Schedules [1] .Student.Schedules [0] .Student.Schedules [0 ].Prénom. N'est-ce pas une référence circulaire? Est-ce autorisé? –
Oui, c'est autorisé. Il ne provoque pas de régression infinie car (a) si vous créez les objets à la main, vous réutiliserez les objets qui existent déjà (par exemple, lorsque vous créez un Schedule, vous définissez sa propriété Student sur l'Etudiant existant, et non créer un nouvel étudiant) ou (b) si vous utilisez un ORM, il détectera qu'une clé fait référence à un objet existant et le réutilise. La plupart des ORM chargeront par défaut par défaut: par ex. Lors de la construction d'un étudiant, ils rempliraient la collection Schedules lorsque vous le demanderiez (et inversement, ils ne rempliront Schedule.Student que lorsque vous le demanderez). – itowlson