Павел
А в остальном все решается и без излишней кривоты с должными знаниями
The Ant
Не думаю, что % любящих подрочиться с каким-нибудь говном выше нормальных адекватных людей, которые ценят свои нервы и время.
Павел
The Ant
Ну, т.е. потратить неделю чтобы допилить срань это не дрочево? )
The Ant
как по мне самое настоящее
Павел
Мы обсждаем отсутсвие сахара на 50 строк кода
The Ant
нет, я бы окунулся с головой в бочку с дерьмомсолидом и начал хуячить никому не нужные абстракции
*fix
The Ant
ради абстракций, симфони вей же
Павел
Павел
Павел
Даже тут максимум 2 - входной файл , да и все наверное, т.е. даже 1. Можно его разделить на два вход/ выход. конец
Павел
Не делай простое сложным. А сложное делай простым. Изи вей )
The Ant
да тут точно на неделю
Павел
@theantt ну а если уж писать нормально, то тебе в любом случае нужна будет абстракция над либой. А что будет внутри (газл, симфа, курл ...) уже 100% насрать.
The Ant
Нет, если я всегда юзаю газл, то абстранции над ним мне не нужны
The Ant
тут вопрос вероятностей всего-лишь, если пакет меняется раз в пятилетку, то можно забить
Павел
Твой предметный код не должен работать с газлами, другими клиентами. Он должен работать с каким нить FileDownloader или с HttpClient В целом можно юзать и их интерфейсы основные, потом в случае чего в composer прописать на свою реализацию через psr4
The Ant
на всякий случай писать абстракции для достаточно надежных пакетов такое себе
The Ant
The Ant
по сути ты предлагаешь обернуть каждый сторонний пакет в свою обертку
Павел
Павел
The Ant
и как часто вы меняете пакеты на альтернативные или заменяете своей реализацией? есть метрики?
Павел
Ну по крайней мере что не сильно жжет по попке
Павел
Павел
Зачем мне в коде ловить везде и обрабатывать какой то guzzleException ?
The Ant
сорян, но у меня нет времени думать над своими абстракциями, чтобы предусмотреть возможность сменя пакета и адаптацию под новый возможной
Павел
У каждого свой путь джедая)
The Ant
взять к примеру газл, чтобы написать к нему адекватную обертку с применением той же опции синк, я должен заглянуть в будущее, чтобы узнать, если что-то подобное у еще не вышедшего пакета?
The Ant
как например вот у симфоневского, у которого даже близко ничего такого нет
Павел
The Ant
заодно посмотреть возможные варианты из других пакетов, чтобы безболезненно сделать опции в своем адаптере
Павел
Ты должен смотреть, какой функционал нужен твоему коду, какие нужны ответы, с чем ты будешь работать
The Ant
крч такое себе
Павел
Пишешь себе эту асбтракцию, например AsyncFileDownloader. Потом: какие ошибки могут быть и важны для меня? Какие входы, выходы. Что ты будешь юзать
Павел
И потом пишешь под это клент на газле, симфе
The Ant
т.е. под каждое действие у меня будет свой клиент?
Павел
The Ant
The Ant
т.е. обычный реквест мы обязаны стандартизировать
Павел
Твоему коду это важно? Который этот клюент (твой интерфейс) юзает? нет
Павел
Я возможно некорректно объясняю )
Павел
НУ для примера. Не говорю что это правильный путь
Павел
Коду который юзает этот клиент насрать, что там внутри: газл, симфони, курл, мок
Павел
Response тоже мой
The Ant
т.е. ты мапишь респонс от адаптера на свой? )
Павел
А не мокать газл билдер, газл респонс и прочую цепочку
The Ant
т.е. смотри, для использования хттп клиента ты делаешь адаптер со своим интерфейсом, где стандартизируешь опции\параметры под запросы.
The Ant
попутно пилишь свои респонс\реквесты, которые тоже адаптеры
Павел
The Ant
затем добавляешь свои исключения, какие-то сервисные штуки по типу промисов газла(или как ты там делаешь это?)
The Ant
т.е. по сути пишешь полный прокси клиент
Павел
The Ant
ок
The Ant
допустим тебе надо поменять с газзла на симфу, где вообще всё по другому устроено, чо делать будешь? )
Павел
The Ant
другие опции. другие методы, другие исключения
Павел
У меня абстракция которой насрать на клиент
The Ant
ну вот синк этот сраный, придется же реализовывать, а если не влезет?
Павел
Павел
Есть AsyncDownloadManagerInterface.
У него есть входной параметр File($url, $pathToLocal). У него допустим есть методы isSuccess():bool , getError():?string - ну это прям вообще на пофиг пример. Эти методы будут вызываться после выполнения startDownload
Есть метод AsyncDownloadManager->startDownload(File ...$files)
Например нашему коду который юзает AsyncDownloadManagerInterface важны какие то два экзепшена, мы их тоже пишем SuperErrorException, ClientConnectionException
Есть SymfonyDownloadManager
Есть GuzzleDownloadManager
У нас что есть проблемы как вытащить из File данные и применить в любом из них?
Есть проблемы как их экзепшен преобразовать в SuperErrorException?
Павел
Меняй туда сюда и в ус не дуй, пиши третий , пиши мок. Входные выходные данные у всех одинаковые - то главные.
The Ant
The Ant
свой адаптер на полчища клиентов, или заюзаешь контретный?
Павел
The Ant
The Ant
я думал ты предлагаешь сделать адаптер под сраный газл и юзать его во всех подобных сервисах
Павел
Чтобы мы во всем нашем коде, не юзали газлвский клиент 20 раз, а юзали например 2 раза, а 18 наш интерфейс.
Павел
Например я пишу клиент для доступа к какому любо апи
Павел
Я в нем работаю не с гащлом а скаким нить своим httpClient
The Ant