Maxim Kainov
А ты хочешь еще и валидацию в него впихнуть
artem
А какое тогда предназначение класса реквест если не обработка входящего запроса ?
Он и ничего не должен делать кроме как получать запрос и хранить
artem
Ну такое ))) если есть возможность разложить все по полочкам, зачем городить все в сервисы )))
Я тебя удивлю) у меня сервисы тоже ничего не делают только ищут нужную команду))
artem
Зачем? Более читабельный код
artem
Если сервисы ничего не делают, то они не нужны )
Нужны. Но на моем уровне почти нет. Я могу делегировать это на команды. С них искать команды и вот раскладывать как хочу) примерно на уровне архитекты
artem
Что за команды?
Если не знаешь то тебе ещё рано. Почитай доки по сервисам
artem
С чего бы это мне рано )
Ну молодой ещё) уже бы зашёл на symfony.com нашел доки и понял бы о чем говорят
Maxim Kainov
Ну молодой ещё) уже бы зашёл на symfony.com нашел доки и понял бы о чем говорят
Ты че, старый уже? Зачем мне сидеть гадать, о каких командах ты речь ведешь. Консольные команды?
Maxim Kainov
Забаньте его )
artem
Забаньте меня)😁 учи матчасть.
Андрей
раскладка кода на сервисы, команды и тд дает возможность не привязываться к фреймворку...
Андрей
как по мне
Андрей
+ тесты
artem
как по мне
Ну как по мне просто читабельность) да и тесты)
Andrey
Это про что говорил Дмитрий Елисеев в докладе?
Andrey
Там у него кейсы
Андрей
в каком докладе?
artem
Я пока хз как их правильно писать, а как тестить думаю не доберусь
Андрей
О каких командах ты говоришь?
у меня в сервисах чаще всего просто команды (инструкции) к репозиторию ну это в простом случае
Maxim Kainov
Забаньте меня)😁 учи матчасть.
Без тебя разберусь, что мне делать
artem
у меня в сервисах чаще всего просто команды (инструкции) к репозиторию ну это в простом случае
Я все ещё стараюсь чтобы передавалось сообщение от сервиса на команду, а дальше пусть разбираются)) главное резалт
Maxim Kainov
Andrey
Там все просто, есть класс Command и Handler. В команде все входные поля с валидацией. А в хендлере один публичный метод handle куда передаешь параметром команд
Andrey
Получается для каждого кейса видно сразу что на входе нужно
artem
Там все просто, есть класс Command и Handler. В команде все входные поля с валидацией. А в хендлере один публичный метод handle куда передаешь параметром команд
Та уже сделал. Как передавать их между собой вроде тоже нашел но оно страшно работает. Будто на костылях
artem
Получается для каждого кейса видно сразу что на входе нужно
Я вылавливаю с бега данные от команды уже страшно
Andrey
Я сделал у меня отлично, только у меня одно правило что кейсы кидают ошибку в случае left way. Поэтому в контроллере их юзаю через try
Андрей
Там все просто, есть класс Command и Handler. В команде все входные поля с валидацией. А в хендлере один публичный метод handle куда передаешь параметром команд
мне показалось немного замысловато, но если разобраться, то очень неплохой вариант опять е покрытие тестами хорошее
Andrey
Исключения хороши тем что всплывают на самый верх
Maxim Kainov
у меня в сервисах чаще всего просто команды (инструкции) к репозиторию ну это в простом случае
То есть, у тебя сервисы в основном просто обращаются к репозиторию? Для чего они нужны тогда.
Andrey
Я тоже раньше валидацию в реквесте делал, но неудобно юзать сервисы между собой или если через консоль потребуется.
Andrey
А сейчас фреймворк-контролер это по сути транспорт чтобы запустить мой кейс
Андрей
То есть, у тебя сервисы в основном просто обращаются к репозиторию? Для чего они нужны тогда.
код читабельнее, опять же тут идет влияние других фреймворков некая унификация
Andrey
И в моделях никакой логики-рулов только релайшены
artem
И в моделях никакой логики-рулов только релайшены
Ну зачем переписывать что уже создано почти под идеал)
jenia
Скажите почему у меня ошибка
jenia
Cannot autowire service "App\Model\NewsLetter\Entity\NewsLetter": argument "$email" of method "__construct()" is type-hinted "string", you should configure its value e xplicitly.
Maxim Kainov
А сейчас фреймворк-контролер это по сути транспорт чтобы запустить мой кейс
Вот это хорошая идея, но не стоит ли прям весь код из контроллеров переносить.
jenia
Services.yaml
Это как?
Maxim Kainov
artem
Ну если быстро то убери string в методе, я против таких методов
artem
Это как?
Это документация
jenia
Ну если быстро то убери string в методе, я против таких методов
Пробывал. Cannot autowire service "App\Model\NewsLetter\Entity\NewsLetter": argument "$email" of method "__construct()" has no type-hint, you should configure its value explicit ly.
Andrey
Вот это хорошая идея, но не стоит ли прям весь код из контроллеров переносить.
У меня своё правило выработалось, что объект реквест не должен ходить дальше контроллера. Контролер этож просто точка входа хттп. А если я хочу через консоль запустить или другой сервис, очередь и т.д.
jenia
Значит передай аргумент
Так и делаю. public function handle(Command $command): void { $newsLetter = new NewsLetter( Id::next(), '', new \DateTimeImmutable() );
Andrey
В сущностях минимум логики пишу
Вообще не должно быть логики, прослойка как Repository нужна чтоб отделить логику от орм
Andrey
Ты потом можешь на эту логику хоть другую орм подрубить
Andrey
https://elisdn.ru/blog/135/phprussia-oop?utm_source=subscribe&utm_medium=email&utm_campaign=all
Andrey
Хороший доклад
jenia
ты по доке делаешь ?
По логике делаю
Dmitrij
По логике делаю
не не, симфа и логика 2 разные вещи... делай как должно быть
Dmitrij
Ок. Какую часть читать?
не, ты не понял )) я когда по доке делал, то у меня так же было )) ты в сервисах некорректно прокидываешь данные
Andrey
И когда единственный публичный метод у кейса handle вписывается в первое правило солид, единой ответственности кейса
jenia
Почитай что такое автовайринг
Это когла он подключает в конструкторе то он подключает его с данными своими наполнеными.
artem
не не, симфа и логика 2 разные вещи... делай как должно быть
Как создана симфа. Вы можете делать как захочешь) все очень просто😊 но сложно сначала
Maxim Kainov
Это когла он подключает в конструкторе то он подключает его с данными своими наполнеными.
Это когда автоматически создается объект класса и закидывается в di контейнер
jenia
Это когда автоматически создается объект класса и закидывается в di контейнер
Ну да. И тут он когла в начале перед выполнением кода начинает смотреть что у кого есть то он сразу начинает делать связи
jenia
И по ходу не может найти что засунуть туда и поэтому ошибка наверное
Maxim Kainov