Проектирование архитектуры классов модели. Какой из двух вариантов выбрать? Добрый день.
При проектировании архитектуры приложения возник вопрос. Имеется три сущности: Заказчик, Заказ, Исполнитель. Каждый заказ относится только к одному заказчику. Заказ разбивается на составляющие и передается исполнителям. У приложение есть три основные задачи:
1) Создание счетов для заказчиков, включающих заказы.
2) Создание чеков исполнителям, включающих выполненные исполнителями работы.
3) Ведение интерактивной таблицы, отражающей все заказы со всеми подробностями, в том числе и с перечнями выполненных работ и исполнителями в рамках заказа.
Стоимость заказа не зависит от количества и стоимости выполненных работ исполнителями. Заказы и выполненные работы не зависят друг от друга логически, но имеют некоторые общие поля - например дату заказа и др..
В голову приходит два варианта взаимодействия классов:
1. Класс Заказчик хранят в себе сделанные заказы. При этом создание счетов получается очень простой операцией: извлечь из заказчика все его заказы и упаковать в счет.Класс Исполнитель хранит в себе выполненные работы. При этом создание чеков аналогично простое.
Но возникает сложности с ведением интерактивной таблицы (пункт "3)"). Эта таблица формируется из базы данных, а значит для того, чтобы связать заказ с работами исполнителей придется для каждого заказа "потрошить" всех исполнителей в поисках работ выполненных в рамках этого заказа.
2. Класс Заказ - "главный". Он хранит в себе своего заказчика, а также исполнителей и их работы выполненные в ходе заказа. Теперь отображение и изменение этой таблице простое. Но трудности с составлением счетов и чеков, так как чтобы выбрать все заказы определенного заказчика - придется просматривать все заказы. Для выбора всех работ исполнителя для чека - придется просматривать опять же все заказы.
Можно ли как-то объединить эти решения? использовать преимущества обоих без недостатков?
Извиняюсь за много букв, мой первый вопрос тут. Спасибо!

21 Авг 2019 в 07:07
211 +1
0
Ответы
1

Здравствуйте! В вашем случае, возможно, стоит рассмотреть использование паттерна проектирования "Хранилище" (Repository).

Вы можете создать классы-репозитории для каждой сущности (Заказчик, Заказ, Исполнитель), которые будут отвечать за доступ к данным этих сущностей из базы данных. Эти репозитории могут содержать методы для получения заказов заказчика, работ исполнителя и других необходимых данных.

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

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

Другой способ объединить оба варианта - использовать агрегацию и композицию в ваших классах. Например, класс Заказ может содержать ссылки на заказчика и список исполнителей с их работами. Таким образом, вы сможете легко обращаться ко всему необходимому контенту, связанному с заказами, заказчиками и исполнителями.

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

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 718 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир