Как вы моделируете простые композиционные отношения? - PullRequest
0 голосов
/ 28 апреля 2009

Может ли кто-нибудь помочь мне понять, как лучше моделировать композиционные отношения?

Если, например, у меня есть студент, у которого может быть много расписаний, я бы написал примерно:

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 в свой объект Schedule?

Мое приложение передало Student Pk моему объекту Schedule для выполнения функции CRUD. Я оставляю Student PK в качестве закрытой переменной, чтобы сохранить ее, если она мне понадобится.

Поскольку мое приложение становится все более сложным, мне трудно поддерживать то, что я делал. Каковы ваши предложения для меня? Что еще я могу проконсультировать (книги / ссылки), чтобы освежить и лучше справиться с этими основами?

1 Ответ

2 голосов
/ 28 апреля 2009

"Я хочу, чтобы я мог написать Schedule.Student.Name и получить взамен имя студента. Добавлю ли я также свойство Student в свой объект Schedule?" Да.

То, что вы описываете (поддерживая как внешние ключи для поиска, так и ссылки на объекты для удобной навигации по графу объектов), звучит как очень хорошее совпадение для объектно-реляционного преобразователя (ORM). Хороший ORM автоматически загрузит связанный объект / объекты для вас, используя FK / PK (например, если в расписании есть поле StudentPK, тогда картограф будет обрабатывать загрузку / сопоставление свойства Student для вас). Существует много продуктов такого типа: вы можете использовать встроенные .NET-инфраструктуры, такие как Entity Framework , с открытым исходным кодом, такие как NHibernate , или коммерческие продукты, такие как LightSpeed ​​, LLBLGen , EntitySpaces или OpenAccess (раскрытие: я работаю в компании, которая делает коммерческий ORM). Google для ORM или объектно-реляционного картографа, или проверьте Wikipedia, для обзора вида вещей, которые я описываю.

...