Кто должен установить отношения? Сущность или Картограф данных? - PullRequest
1 голос
/ 04 января 2010

Есть четыре класса:

StudentBase , CourseBase и StudentDataMapper , CourseDataMapper

Объект Student может иметь связь с объектом Course. Один студент может иметь много курсов. Один курс могут посещать многие студенты.

На диаграмме ER сущность Студента имеет атрибут, называемый «курсы», но курс ничего не знает о своих учениках. У курса нет Атрибута под названием «студенты» взамен.

Какой из этих классов должен выполнять создание отношений?

РЕДАКТИРОВАТЬ: Это системный уровень! На уровне бизнес-логики разработчик создает подклассы StudentBase и CourseBase для создания класса Student и класса Course. Разработчик, создавший эти классы, не увидит ничего из этого кода, за исключением своего собственного кода бизнес-логики.

Ответы [ 3 ]

5 голосов
/ 05 января 2010

Ни.

Во-первых, ERD должен измениться; то, что вы описали, это отношения «многие ко многим» (курс может иметь много студентов, а студент - много курсов). Таким образом, у студента не должно быть атрибута курсов, но вместо этого должен быть объект студенческого курса.

Тогда должен быть класс StudentCourseDataMapper, который делает то, что вы просите (поддержание отношений), и как StudentDataMapper, так и CourseDataMapper должны знать об этом и использовать его.

0 голосов
/ 05 января 2010

Чтобы ответить на ваш вопрос относительно того, кому следует управлять отношениями, ответом может быть «Студент», «Курс» или «Оба».

Как вы видите, как используются эти классы? Если они всегда используются с точки зрения курса, вам нужно добавить свойство студентов, которое управляет отношениями. И наоборот, если они всегда используются с точки зрения студента, то, очевидно, это то, где он живет.

Однако, если это может быть и то, и другое, что кажется наиболее вероятным ответом, учитывая типы данных, о которых вы говорите, то он принадлежит в обоих местах.

0 голосов
/ 04 января 2010

Не уверен на 100%, понимаю ли я ваш вопрос.

Например, NHibernate (который является объектно-реляционным картографом) старается не оказывать максимально возможного влияния на ваш бизнес-код.

Так что ORM не должен управлять вашими отношениями. Оно должно быть таким, какое оно есть при хранении, и воссоздавать его в исходное состояние при загрузке из базы данных.

Если курс ничего не знает о студентах, он не может управлять отношениями.

Итак, исходя из вашего описания ситуации, студент является наиболее естественным местом, где можно установить отношения.

...