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