Необходимо разъяснение отношений диаграммы классов для сотрудников, OrderMission и отдела

Я работаю над диаграммой классов для своей стажировки. Я столкнулся с ситуацией, с которой раньше не сталкивался, и меня не совсем устраивает выбранный мной подход. Вот отношения, которые мне нужно смоделировать:

  1. Миссия сотрудника и заказа:

    • Сотрудник может нести ответственность за несколько Миссий Заказа, но у каждой Миссии Заказа может быть только один ответственный Сотрудник.
    • Сотрудник может участвовать во многих миссиях OrderMission в качестве сопровождающего лица, и каждая миссия OrderMission может иметь несколько сопровождающих Сотрудников.
  2. Сотрудник и отдел:

    • Сотрудник назначается только одному отделу, но в каждом отделе может быть много сотрудников.
    • Сотрудник может быть руководителем только одного отдела, и в каждом отделе может быть только один руководитель.

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

это то, что я пробовал.

Вместо присвоения имен ассоциациям следует размещать имена свойств там, где они принадлежат.

qwerty_so 16.07.2024 18:05

Спасибо за ваш ответ, в каждом классе я назвал свойства. Я назвал ассоциации просто для большей наглядности.

Yassine Riahi 16.07.2024 18:49

Кратности, похоже, были введены в поля имени свойства. Подсказка — знаки плюс, показывающие видимость. Названия ассоциаций, которые у вас есть, будут более понятными на концах, противоположных подлежащим предложениям.

Jim L. 16.07.2024 19:08

Свойства с типами, которые не являются типами данных, должны быть преобразованы в свойства конца ассоциации.

Jim L. 16.07.2024 19:10

Как сказал Джим. Я предполагаю, что Кристоф скоро даст хороший ответ. Для меня уже слишком поздно...

qwerty_so 16.07.2024 23:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я буду использовать Mission вместо MissionOrder или OrderMission.

Прежде всего, сотрудник МОЖЕТ нести ответственность или МОЖЕТ сопровождать Миссию. Это означает, что не все сотрудники обязательно связаны с миссией (подумайте, например, о новых сотрудниках до того, как они получат роль в своей первой миссии). Следовательно, на конце Миссии кратность должна быть 0..* (или ярлык *).

Мы понимаем, что любая Миссия требует ответственного, поэтому 1 — это нормально. Но в каждой ли миссии есть сопровождающие? Более того, в жизненном цикле миссии, когда создается новая миссия, известны ли сопровождающие лица с самого начала? Если ответ на любой из этих вопросов отрицательный, кратность на стороне Сотрудника должна быть 0..*.

На сотруднике/отделе то же самое. 1 на стороне работы отдела в порядке. Но из вашего повествования неясно, должен ли в отделе быть хотя бы один сотрудник. Предположим, что руководитель также работает в отделе 1..*, это нормально. Если вы не уверены (например, можно создать отдел, а начальник назначить позже), выберите 0..*.

С ассоциацией поваров не все в порядке: не все сотрудники руководят отделом. Итак, в конце отдела должно быть 0..1.

Знак + в конце ассоциации предназначен для публичного просмотра. Если вы хотите его использовать, лучше добавьте имя роли, то есть имя, которое вы дали бы свойству класса на противоположном конце, которое будет ссылаться на класс в конце ассоциации. Другими словами, гораздо менее двусмысленно написать department рядом с + в конце главной ассоциации класса Department, чем иметь атрибут Department:Department.

Большое спасибо, очень полезно! Я зафиксировал кратности в ассоциациях. Чтобы быть уверенным, что я правильно понял последнюю часть, посвященную публичной видимости, я удалил атрибут Department: Department из класса Сотрудник, а также атрибуты сотрудники: Список<Сотрудник> и шеф-повар: Сотрудник из класса Отдел. И я заменил их следующими ассоциациями: (Employee Class) * employee ----- 1 department (Department Class) и (Employee Class) 1 chief ----- 0..1 chiefOf (Department Class)

Yassine Riahi 17.07.2024 08:13

Также еще один вопрос: часто ли 2 класса могут иметь более 1 ассоциации?

Yassine Riahi 17.07.2024 08:24

«Предполагая, что руководитель также работает в отделе…» Обязательное ограничение для ассоциации «начальник»: работают подмножества.

user6580165 17.07.2024 10:30

@YassineRiahi Да, это обычное дело. У вас есть хороший пример. Я вам скажу другое: Человек может управлять Машиной в данный момент времени, но тот же Человек может также владеть Машиной, и это не обязательно одна и та же машина (например, арендовать машину в путешествии, владея автомобилем, который остался в аэропорту). Единственное, с чем вам нужно быть осторожным, это если две ассоциации не одинаковы (например, обратная связь).

Christophe 17.07.2024 10:43

@user6580165 user6580165 ты справился! Действительно, это прекрасный способ решить эту проблему и избежать несоответствий, если это предполагаемая семантика. Потому что я встречал и такую ​​конструкцию, когда начальник одного отдела (например ИТ-отдел) сам был закреплен за входящим в него отделом (например дирекция управления), т.е. начальник не работал в том отделе, в котором он работал. удалось. Это способ показать иерархию, в которой у каждого, включая руководство, всегда есть начальник, которому он подчиняется (кроме генерального директора).

Christophe 17.07.2024 10:51

Семантика может быть такой: 1) в этом отделе должен работать руководитель (это ограничение выражено); 2) в этом отделе не должен работать руководитель (это еще одно ограничение); 3) руководитель может работать в любом отделе (без ограничений). Выбор семантики остается за автором вопроса. «1)» может выражаться одним объединением, тогда сотрудников следует разделить на начальников и прочих (по специализации или признаку).

user6580165 17.07.2024 11:13

Обязательное ограничение: не более одного начальника на отдел.

user6580165 17.07.2024 11:18

Большое спасибо всем, кто ответил (особенно @Christophe). Я не знал, куда обратиться за помощью, поэтому подумал, что, возможно, пришло время попробовать Stack Overflow. Я рад, что сделал!

Yassine Riahi 17.07.2024 12:01

Другие вопросы по теме