Как спроектировать эти отношения между классами? - PullRequest
1 голос
/ 27 апреля 2019

Недавно у меня возник вопрос об объекте / классе.Проблема была в следующем:

«У вас есть университет, и у него есть сотрудники, которые могут быть студентами или преподавателями».

Они попросили меня спроектировать только отношения сотрудников, поэтому я составил простую диаграмму наследования

Затем он спросил меня, что произойдет, если ученик может быть учителем, он не можетнаследовать от сотрудника и учителя.Я не мог ответить, поэтому он разработал решение с классом Role.

Другое решение могло бы использовать Pattern Decorator?

Мое первое решение:

enter image description here

Его решение проблемы множественного наследования

enter image description here

Альтернативное решение?

enter image description here

Что вы думаете об этих подходах?

Спасибо

Редактировать: Я нашел видео на YouTube, где они описывают и решаютВ этой задаче они использовали одно и то же ролевое решение с использованием композиции.https://youtu.be/dYUZiJEy0JE?t=1252

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Это слабый вопрос: «работник может быть или студентом или учителем».Его решение позволяет сотрудникам, у которых нет никакой роли, если создатель объекта «работник» не принудительно применяет инвариант сотрудника, который должен быть одной из двух ролей.С университетом за кадром он фактически делает ваше лучшее решение;то есть отдельная специализация от Сотрудника к Студенту или Учителю. Этот вопрос похож .

0 голосов
/ 29 апреля 2019

Это похоже на типичную ситуацию, которая может быть решена с помощью шаблона Party-PartyRole .

Использование обобщения от Студент / Преподаватель к Сотруднику может в какой-то момент доставить вам неприятности, потому что теперь вы не можете моделировать Студентов , которые не Сотрудники .

enter image description here

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

Вы должны будете добавить дополнительное ограничение на класс Employee, чтобы указать, что Сотрудник должен быть либо Преподавателем, либо Студентом (очевидно, в этом университете нет административного, уборочного, обслуживающего, .... персонала)

Примечание: Возможно, это не тот ответ, который ищет ваш учитель, но это удобный способ моделирования этих вещей в реальном мире .

...