Я предпочитаю, чтобы мой репозиторий был чистым. Я предпочитаю реализовать кэширование на своем сервисном уровне , если необходимо.
Так что я 100% согласен с вашим образцом . Ваш репозиторий возвращает продукты (запустив запрос), и вы можете кэшировать его или нет в других слоях.
P.S .: Я предполагаю, что вы запускаете контекст вашего объекта, когда он необходим (начало сеанса), и удаляете его, когда сеанс заканчивается.