Имеется несколько сервисов (классов). Каждый сервис имеет операцию, которая возвращает некое значение для заданного X. Типы возвращаемых значений отличаются для каждого сервиса.
class CommonService:
getY0(x: X) -> Y0
class Service1:
getY1(x: X) -> Y1
class Service2:
getY2(x: X) -> Y2
class MainService
getY(x: X) -> Y
Реализация сервисов:
— Service1 запрашивает Y0 из CommonService и преобразовывает Y0 в Y1.
— Service2 запрашивает Y0 из CommonService и преобразовывает Y0 в Y2.
— MainService запрашивает Y1 и Y2 и вычисляет Y
Composition root:
dep0 = CommonService()
dep1 = Service1(dep0)
dep2 = Service2(dep0)
main = MainService(dep1, dep2)
Проблема в том, для Service1 и Service2 нужны от CommonService одни и те же данные (вот прям абсолютно одинаковые, для одного и того же X). Поэтому CommonService делает свою работу дважды, хотя мог бы сделать один раз. А работа CommonService может быть очень долгой.
Как изменить интерфейсы сервисов, чтобы избавиться от двойной работы CommonService?