Может кто-нибудь помочь мне понять, как лучше всего моделировать отношения композиции?Как вы моделируете простые отношения композиции
Если, например, у меня есть студент, которого может иметь много графиков, я хотел бы создать примерно:
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; }
}
Где-то вниз линию я может иметь объект Schedule, и хочу, чтобы определить, какой студент принадлежит , Я хочу иметь возможность написать Schedule.Student.Name
и получить имя студента взамен. Я также добавляю свойство «Студент» в свой объект «Расписание»?
Мое приложение передало Student Pk моему объекту Schedule, чтобы выполнять функции CRUD. Я сохраняю Student PK как приватную переменную, чтобы держать ее в руке, если мне это нужно.
Поскольку мое приложение становится более сложным, мне трудно поддерживать то, что я делаю. Каковы ваши предложения для меня? Что еще я могу посоветовать (книги/ссылки), чтобы получить переподготовку и лучше справиться с этими принципами?
Но если добавить свойство Student к моему Schedule собственности, Что мешает мне сделать это: Student.Schedules [0] .Student.Schedules [1] .Student.Schedules [0] .Student.Schedules [0 ].Имя. Разве это не круговая ссылка? Это разрешено? – 2009-04-27 23:03:20
Да, это разрешено. Это не вызывает бесконечный регресс, потому что (а) если вы создаете объекты вручную, вы будете повторно использовать объекты, которые уже существуют (например, когда вы создаете расписание, вы устанавливаете его свойство Student для существующего ученика, а не создать нового ученика) или (б), если вы используете ORM, он обнаружит, что ключ относится к существующему объекту и повторно его использует. Кроме того, по умолчанию большинство ORM будут выполнять ленивую загрузку. при создании Студента они заполняли коллекцию Schedules, когда вы ее попросите (и, наоборот, заселяете Schedule.Student, когда вы ее просите). – itowlson