Дублирование работы сервиса (dependency injection)
От: Буравчик Россия  
Дата: 15.05.20 18:50
Оценка:
Имеется несколько сервисов (классов). Каждый сервис имеет операцию, которая возвращает некое значение для заданного 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?
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.