Как сформировать классы-сервисы? Задача: посчитать цену товара нестандартного размера; для этого надо в зависимости от введенных размеров (ширины и длины) получить цену и размеры этой модели базового и далее по формуле плясать от этого базового. Например, пользователь ввел 80x175, тогда ищем в БД эту же модель размера 80x180 (т.к. ширина меньше 100), ее цену делим на 80 и на 180, умножаем на 80 и 175, далее какой-то коэффициент; если же ширина больше 100, то берем за базовую модель уже другой размер и так далее.
Вопрос, где делать запрос к БД для получения базовой модели. У меня получился класс CustomSizeCalculator. Он сначала находит более короткую сторону (в случае если пользователь ввел ширина больше длины), вытаскивает базовый размер через репозиторий, конечно, считает и возвращает цену.
Так неудобно тестировать и это ограничивает расчет цены только до одной сущности: лучше бы получать базовый размер и его цену где-то в другом месте, а в калькулятор передавать уже только значения. Что для этого сделать, сервис?

21 Авг 2019 в 07:00
182 +1
1
Ответы
1

Да, для удобства тестирования и разделения ответственностей лучше вынести запрос к БД для получения базовой модели в отдельный сервис.
Вы можете создать класс BaseService, который будет содержать метод getProductBaseSize(), который будет делать запрос к репозиторию для поиска базовой модели в зависимости от размеров, введенных пользователем. Этот сервис будет возвращать базовую модель, которую затем вы передаете в CustomSizeCalculator для дальнейших расчетов.
Таким образом, у вас будет два класса - BaseService и CustomSizeCalculator, отвечающих за разные аспекты функциональности, что упростит тестирование и поддержку кода.

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