Как моделировать простые композиционные отношения?

StackOverflow https://stackoverflow.com/questions/795564

Вопрос

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

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

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.Student.Name, и получите взамен имя учащегося.Добавляю ли я также свойство Student в свой объект Schedule?

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top