DS
Size: a a a
DS
AM
AM
AM
AM
DS
AM
DS
AM
DS
AM
DS
DS
AM
DS
AM
DS
DS
yiisoft/resetable
и просто имплементирую в соответсвующих сервисах интерфейс Resetable
. Сброс состояния этих сервисов - это задача приложения и опциональная операция. Скажем, если этот пакет будет использоваться в консольном приложении, то никаких лишних действий произведено не будет. Теперь представь, что этот же пакет я использую например в симфони. Все что мне лишнего прилетит - это интерфейс Resetable
, а сами сервисы будут использоваться как обычно, без каких-либо лишних действий. Но если я захочу в каком-то другом фреймворке организовать работу через рр, то у моих сервисов уже будет готовый интерфейс для сброса их состояния, дело только за реализацией сброса таких сервисов нативными методами фреймворка.yiisoft/event-dispatcher`и `yiisoft/yii-web
. Уже смешно, да? Мы же делали фреймворко независимый пакет, да? Ну ок, поехали дальше. Если я добавлю этот пакет в приложение на yii3, которое работает на рр, то все будет ок. А если на обычное? Правильно, все мои сервисы все равно будут добавлять в диспетчер обработчик и в конце запроса сбрасывать состояние, хотя это там нафиг не нужно. А что будет если я добавлю этот пакет в чисто консольное приложение? Правильно, туда затянет ненужный там пакет yii-web, и будет вхолостую юзать ивент диспетчер, добавив лишнюю подписку. А теперь давай представим, что этот пакет я подключил к симфони. Мне туда затянет yiisoft/event-dispatcher`и `yiisoft/yii-web
, и нафиг они мне там нужны? А нафига мне нужно создавать и пердавать в конструктор неиспользуемый ивент диспетчер? Ну тут еще ок, есть выход, я могу ему поставить дефолтный null
, но не все контейнеры работают так, как yiisoft/di
и не факт, что при автоваеринге какой-то контейнер все же не захочет инстанцировать ивент диспетчер. А что делать, если я в каком-то другом фреймворке захочу организовать работу с рр? Вместе с нативной системой событий юзать йишный ивент диспетчер и эмулировать в нативных событиях йишные события? Ну так это жуткий костыль. yiisoft/di
- этот тоже ерунда. Я даже не буду говорить о том, что в случае приложения, работающего через рр, будут в 99.9% случаев использованы контейнеры из пакета yiisoft/di
. Возьмем этот 0.1%, никто не мешает сделать для таких сервисов отдельную коллекцию и хранить ее в контейнере, а в конце каждого запроса доставать ее из контейнера и проходясь по ней, вызывать у каждого объекта метод reset()
. И все, нет никаких проблем и никакой зависимости от yiisoft/di
.AM
AM