Задать вопрос
@Alksar

Легкая задачка по ООП для архитектора. Как поступить?

Дорогой мой, Архитектор, если ты потратишь 5 минут своего времени и взглянешь на этот пример, то будешь удачлив весь год, обещаю ;). p.s.: а так же я буду очень рад.

Дело в том, что у меня с трудом получается спроектировать структуру для приложения, но я все же сделал это, пока требования не изменились. Ниже я покажу самую краткую выжимку и скажу что поменялось..помоги!

751db42bc5ad46219400f8d89eba2993.jpg
Вроде как картинка не работает, если так, то вот ссылка на яндекс.диск -"https://yadi.sk/i/wo4vavo8g7iuT"

Была заданна задача, которая реализована в схеме выше:

Заказчик делает заказ(CustomerOrder). В заказ входит следующая информация: заказчик(customer), дата заказа(date), задача - которую необходимо выполнить (task), примечание к заказу (note).
Этот заказ, в общем случае, разделяют на "подзаказы" (EmployeeOrder), которые раздают сотрудникам. Эти "подзаказы" так же содержат date и task, а так же сотрудника, кто делает (employee).
Должна быть возможность добавления "подзаказов" к заказу, удаления.
Задача - Task - это один из множество классов наследующий общий интерфейс.

Все получилось может быть и криво, но рабочим.

Теперь появилось дополнительное требование - к одному из видов задач, а именно "InterpretationTask", нужно добавить возможность указывать сверхурочную работу по этому заказу. Сверхурочная работа представляет собой очередной вид задачи - "OverWorkInterpretationTask".
Но вот вопрос: Куда положить и как связать эту сверхурочную работу с основным заказом. Получается сверхурочная работа имеет предпосылки стать отдельным заказом - основана на отдельном OverWorkInterpretationTask, и должна обрабатываться в программе как отдельная единица, но так же она содержит много общего да и вообще строится на основе первичного заказа - заказчик тот же, дата та же, исполнитель тот же но task другая.

Архитектор, жду твоего отклика!
  • Вопрос задан
  • 476 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
Заказчик:
   ...

ЗапросЗаказчика:
  заказчик = FK(Заказчик)  
  // заказчик = М2М(Заказчик) - если заказчики могут обьединяться для запроса
  текст_заказа = текст  // raw запрос
  ...

Проект:
  запрос_заказчика = М2М(ЗапросЗаказчика)
  // менеджер разбивает raw запрос на таски
  
ТипТаска:
  название = текст //  интерпритация, сверхурочность, обучение, 

Таск
  проект = FK(Проект)
  // а можно привязать напрямую к ЗапросЗаказчика и убрать сушность Проект
  // проект = FK(ЗапросЗаказчика)
  тип_таска = М2М(ТипТаска) // сверурочное обучение
  исполнитель = FK(исполнитель)
  ...

Исполнитель:
  ...
Ответ написан
Vapaamies
@Vapaamies
Психанул и снес свои ответы не отмечающим решения…
Если сверхурочный заказ отрабатывается так же, как основной, он относится к сущности "подзаказ". Тогда получается, что метазаказы агрегируют задачи, при этом метазаказ может быть заказом или подзаказом, который разделяет с родительским заказом ключевые свойства.

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

Войдите, чтобы написать ответ

Похожие вопросы