samdark:
Ситуация такая:
1. Есть stateless-сервисы.
2. Есть stateful-сервисы.
3. Есть stateful-сервисы с дорогой инициализацией.
1. С ними всё норм.
2. Нужно убивать в контейнере после каждого request-response.
3. По идее, можно сделать метод reset() и дёргать.
Как у вас с этим?
Titov:
1. все ок
2. очень мало их
3. такие не делаем, юзаем ioc скопы
https://spiral.dev/docs/framework-scopes - обнуляются при выходе из контекста.
Мы сделали максимальное число сервисов стейтлесс. А что не стейтлесс достается из контекста либо через скоп менеджер.
Короче это решается только на архитектурном уровне.
Пункт 2. - это очень больно. 3. тоже.
Так что мы сделали так что они нафиг не нужны. Если у вас жирный сервис стейтфул то проблема не в скоупе.
samdark:
Ну вот ребята хотят запилить ResetableInterface с методом reset() и научить контейнер вместо убийства в скопе таких вызывать reset().
Titov:
Ну сделают симфони. А смысл? Ресет это по любасу костыль.
Пусть глянут другие языки программирования где все всегда висит в памяти. Никто не пишет ресет.
У меня всего 2 ресера на всю аппу, и то 1 для дебага, 2й для орм хипа чтобы быстрее было. Всё.
Ресет говорит о том что у вас приложение МОЖЕТ находится в грязном состоянии до ресет().
А нужно чтобы оно всегда было в чистом состоянии.
samdark:
Вот у нас как раз на дебаге всплыло :)
Titov:
Ну на дебаге я бы сказал норм. Это очень странный эдж кейс.
Но в бизнес слой я бы такого не тянул потому что дебаг сквозной на всю аппу, а логика обычно нет, работает в контексте запроса.
С ресет() вы сделаете симфони где вся логика сквозная и это не очень безопасно но быстро. Скоупы работают немного медленней.
Если надо могу рассказать, или вебинар сделать. Я с этим уже 4 года.