The Ant
The Ant
газл сам по себе абстракция над курлом\стримами )
The Ant
получается пилишь абстракцию над абстракцией, которую надо еще закрыть абстрактным интерфейсом. звучит как какая-то хуета, разве нет?
Павел
ну я пишу <ApiName>Client не оно?
У меня есть CdekApi в нем есть HttpClientInterface а в нем GuzzleClient. Для чегоя это делаю? МИнимум для моков. Я был в проекте где мокали галз, это пиздец. Замокать клиетнт, который генерит респост, в котором замокать гетконтент и так каждый раз
Павел
@theantt я выше скидывал скрин, разве большая абстракция?
The Ant
там просто интерфейс
The Ant
который покрывает оч мало кейсов
Павел
Скорее всего это гавно, но вот собственно весь код, разве много ?
Павел
Зато когда у меня сдек вообще не работал (у них фейлы), я просто свой мок подставлял пока разрабатывал, по их документации
The Ant
и респонс почему-то газловский, хотя должен быть уже свой
Павел
Павел
А CdekApi юзает HttpClientInterface
The Ant
ну как я вижу с твоих слов, должен юзать именно свой клиент
The Ant
внутри которого лежит газл\симфа что там еще
Павел
The Ant
да, но в твоем коде юзается код газла
The Ant
так что какая разница, будет там газл интерфейс. или твой?
The Ant
как по мне уж лучше явно указать что именно там юзается, хотябы будешь понимать с чем работаешь
Павел
$response = $this->client->request($method, $relativeUrl, $options);
$content = $response->getBody()->getContents();
$statusCode = $response->getStatusCode();
return new Response($statusCode, $content); (Это уже мой респонс)
Сколько нужно замокать, чтобы отдать json без моего респонс?
1) guzzle client который отдаст мок объект guzzle response
2) guzzle response, в котором нужно релизовать getBody
В соем случае:
1) Мой client, который отдает new Response(200, json_encode());
Полегче да?
Ну и сам факт независимости CdekApi от конкретной реализации http client
Павел
Ну в целом это не критикал, тут на вкус и цвет. Мне показалось мокать газл ужасно неудобно, именно поэтому пришел к этому + DIP
The Ant
м.б. от стиля писателя зависит еще? )
Я например не хочу в коде разбирать ответы. Мне или данные готовые давай, или ошибку.
The Ant
зачем каждый раз разбирать гдето ответ? муторно же
Павел
Павел
Пишешь свой HttpClientInterface который или ответ или ошибка.
Павел
Просто в данном случае код передавался для того, что бы потом сделать повторную авторизацию если протух токен. Там есть еще AuthClientInterface который декоратор
Павел
Он авторизировался и получал акссес токен
Павел
Как видишь еще один плюсик) Можно навертеть сверху декораторы
The Ant
это вообще мидлварью должно делаться )
Павел
The Ant
нет, по идее. т.е. чек токена до запроса, и получение нового, если протух
The Ant
т.е. в твоем коде этого поидее не должно быть вообще, это должно быть в настройках гдето
Павел
А, чек токена по времени внутри. Ну это если оно есть там
Павел
ТАм вроде не jwt был, точно не помню
Павел
Ну короче у каждого свое виденье, это норм)
The Ant
хз короче, думаю продолжу просто юзать газл. безо всяких сраных адаптеров :D Потому что альтернатив тупо нету всё равно
The Ant
а когда появится что-то более вменяемое, незазорно потратить пару дней и переписать там где юзается на что-то другое. Потому что в любом случае придется что-то переписывать 😄
Павел
Павел
Короче главное чтобы нравился свой стиль)
The Ant
ну, помимо стиля есть еще практичность. вот в адаптерах ради адаптеров я её не вижу, эту практичность. Учитывая что многие штуки, годами не меняются... да не то что годами, никогда примерно.
Павел
The Ant
декораторы и так можно сделать,в симфе по крайней мере
Павел
The Ant
говно, хотел бы декоратор через атрибут навесить, а некак
The Ant
в питухоне вот можно. а тут нет. какой пиздец
Павел
The Ant
это когда? )
The Ant
отлично! хоть что-то приятное за сегодня
Юра
В обычном проекте симфы и так уже овер 8000 пхп файлов. Хочется асинк загрузки файлов, берешь либу созданную для этого и грузишь. Вот а проблем?
Dima
Dima
Этот вопрос имеет некоторую специфичность для Симфы, но в целом пох
Пишу валидатор апи респона. Точкой входа естть 2 публичных метода.
И далее я по приватным таскаю два переданных параметра
Я тут подумал, что бы не таскаь их за собой, я могу ими наполнить состояние валидатора (присвоить свойствам эти два парамера)
И далее не таскать их, а просто обращаться к ним
Dima
Но, есть очень старый баян, мол сервисы не должны быть мутабельны (что я типа нарушаю присвоивши два параметра
Dima
Но по факту, мой валидатор сервис даже не полноценный сервис, т.к у него нету зависимостей которые бы я в него инжектил
Юра
Хз я такое вижу сплошь и рядом
Юра
Только я не понимаю почемк тогда не сделать просто передачу тужа данных через конструктор если это не сервис
Юра
И простл создал валидатор с параметрами, провалидировал
Юра
Как форму
Юра
Инджектить можешь в таком случае валидатор фактори с методом createValidator(req, res), которая будет возвращать новый валидатор
Юра
И не надо делать два раза initialize тогда
Юра
А то выглядит как-то не оч
Юра
А если фактори будет возвращать интерфейс, то можно еще и изменить имплементацию без гемора
Иван
я боюсь, что человек, который это будет поддерживать, захочет тебя убить
Иван
вот лично мне не нравится всё, начиная с нейминга
что такое реквестдто?
это реквест или дто?
Иван
почему просто валидатор и аннотации не используются?
Иван
прошу прощения, реквест дата
тут дто должен быть
The Ant
Юра
https://github.com/php-curl-class/php-curl-class#available-methods
Юра
Там тебе и мультикурл и addDownload(url)
The Ant
ужас
The Ant
это для коленочных скриптов :D
Юра
Значит пришло время написать свою библиотеку и поделиться со всем миром этим гениальным изобретением
Иван
Руслан 🇲🇨
Здравствуйте!
Руслан 🇲🇨