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

Проектирование классов, наследование, агрегация, что выбрать?

Язык c#. Нужно реализовать архитектуру классов для заказов, если коротко, то:
Есть несколько типов заказов, для всех них есть общие данные и поведение, а значит делаем абстрактный класс Order (Заказ) реализующий это.
Далее есть две классификации для развития заказов:
1) Заказы делятся на:
а) Заказы с одним исполнителем. (Содержат в себе объект Employee, выполняющий заказ полностью);
б) Заказы с несколькими исполнителями. (Содержат в себе список Employee-->Task, где Task - часть заказа, которую выполняет исполнитель).
2) Заказы делятся по типу:
a) Заказ на письменный перевод.
б) Заказ на устный перевод.
в) Заказ на чтение курса.
При этом Заказ на письменный и устный перевод - имеют общую логику, а поэтому логично предположить, что они должны иметь общего предка, например - абстрактный "Заказ на перевод".
Но вот в чем дело:
Заказ на письменный перевод имеет много исполнителей.
Заказ на устный перевод и чтение курса - одного исполнителя.
А значит если вводить родителей "Заказ с одним исполнителем" и "Заказ с несколькими исполнителями", то не получится иметь общего предка для переводов.
Как поступить в такой ситуации?
  • Вопрос задан
  • 510 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
Поддерживаю asdz. По идее поведение классов для N исполнителей не должно отличаться с учетом N (даже если N = 1).
Если уж очень важно отношение "я есть заказ с одним/многими исполнитель/-ями" можно указать, что заказ на чтение курса и на устный перевод реализует интерфейс IHaveOnePerformer, а заказ на письменный перевод реализует интерфейс IHaveSeveralPerformer.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@asdz
Заказ с одним исполнителем это частный случай заказа с несколькими исполнителями. Может просто добавить в класс заказа свойство возвращающее тип заказа в зависимости от количества исполнителей?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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