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