Михаил Непряхин: Допустим привет как видно слышно плюсики пираты Поставьте
Михаил Непряхин: Так спасибо
Михаил Непряхин: Так значит какая у нас сегодня была тема сегодня будем говорить о подходит пикфест
Михаил Непряхин: так ну значит вот У нас есть
Михаил Непряхин: свои. Над Возьми здесь свои. Контролеры
Михаил Непряхин: соответственно Контролер вызывает какую-то бизнес-логику эс кейс
Михаил Непряхин: ну Там вискис Уже вызывает Адаптацию адаптер либо доменные функции
Михаил Непряхин: если сеть То адаптаторы если не сеть То доменнойкт функции
Михаил Непряхин: а вот сегодня Мы будем говорить Про свой Контролер и Именно Хтп
Михаил Непряхин: Ммм роснано с Следующим рокеры Поговорим по джерписи вот джерписи
Михаил Непряхин: нету вариантов как По-другому написать живописи Кроме как с помощью генерации
Михаил Непряхин: и в джакузи вы Сперва пишете Ротабаф файл
Михаил Непряхин: протофайл описываете. Ну а там Даже Герписи как в Живописи формате но похожим на прото вызываете ся мою. Команду
Михаил Непряхин: Там словно генерация какая то и из вот этой вот спеки генерируется генерируется Код
Михаил Непряхин: который вы потом Используете в Контроле
Михаил Непряхин: и Как бы вариантов Других Нет А в Случае с Хтп сервером Есть Два варианта значит Мы Вот
Михаил Непряхин: То Как до этого Мы Писали этот подход называется Котфест
Михаил Непряхин: то Есть Мы Сперва пишем ручки контролера а Потом после этого Мы пишем
Михаил Непряхин: и в Формате у нас принят стандарт Это у анапе оп наэйпий а третья, версия текущая версия третья,
Михаил Непряхин: ну. Еще то же самое Иногда называется Лагерь, как бы чаще всего это
Михаил Непряхин: почти синонимы Говорят Лагерь имеют в виду опыты а теперь Говорят о Понапе и тут Заги
Михаил Непряхин: и есть несколько, Тоже, вариантов Можно это этапии просто руками описать
Михаил Непряхин: а По тому Что Мы Там накодили Можно расставить в Коде комментарии
Михаил Непряхин: и По этим комментариям Генерировать вот этот вот апе
Михаил Непряхин: до недавнего времени подход Был довольно популярен с помощью библиотеки сваг гоу мы Могли генерировать искода
Михаил Непряхин: этот самый апион Но минус том такшес
Михаил Непряхин: тридцать двенадцать тысяч звездочек популярна библиотека
Михаил Непряхин: минус в том что не поддерживает третья версия с вагером
Михаил Непряхин: ну не то Чтобы прям там третья версия сильно нужна но просто типа
Михаил Непряхин: прогресс не стрит на месте все идет, вперед а Десять библиотек попадет, Штука второй версии что и
Михаил Непряхин: ну. Так чтобы понимать примерно как это выглядело Сейчас я уже по-моему показывал а здесь под разное ведь можно с разными роуторами работать
Михаил Непряхин: ну тут вы в премурке, называются но по факту это Просто роутер
Михаил Непряхин: ну вот Мы с чьи работаем да самый популярный это вот Джин
Михаил Непряхин: и вы просто вот добавляете вот такие комментарии
Михаил Непряхин: по Коду, и из Этих комментариев потом генерится вот эта вот спека а конкретно над ручками,
Михаил Непряхин: так это в и по этим Комментариям
Михаил Непряхин: вот эта вот прямо Структура она Реально указана ну то Есть у вас в коде Есть структуры с которыми вы работаете ну грубо говоря там в асапе вот принимает оно вот какую-то какую-то модельку ну типают нас вот этот доменный свой называют вот и когда вы здесь вот указываете что
Михаил Непряхин: по ну в случае с эксцесс по двухсотому ответу возвращается вот эта модель
Михаил Непряхин: эта модель подхватывается и используется эти Поля и Генерица аспека
Михаил Непряхин: типа в конечном итоге аа будет генерал ну там нечто подобное
Михаил Непряхин: то есть грубо говоря там вот возвращается профайл, по двухсоттому ответу и Мы
Михаил Непряхин: вот видим То, есть это ручка колеи да вот Мы видим что вот здесь у нас есть
Михаил Непряхин: как раз-таки структура только с одним полем айди
Михаил Непряхин: и эта айде Описано что это стринга формат. Ее идеи дискрипшен и к замку и вот это вот все
Михаил Непряхин: позволяет эта библиотека разгенерить то есть Там у
Михаил Непряхин: у этих структур тоже добавляются эти Стратеги ну уж тут прямо очень много очень много всего
Михаил Непряхин: Ну такое вам может попасться Поэтому как бы просто показываю что Информация что такое есть
Михаил Непряхин: в целом подход. Считается депрессией Значит Актуальный подход который как Бы вот
Михаил Непряхин: все декларируют О том что вот типа надо надо надо
Михаил Непряхин: Значит этот подход называется спек Фест
Михаил Непряхин: когда вы сперва пишете вот Эту вот
Михаил Непряхин: ну, то Есть вот Эту вот Докуку вы ее сперва пишете
Михаил Непряхин: а ну, Там с помощью чада же беди руками и кричу как-то вы ее пишете
Михаил Непряхин: а согласовываете ну грубо говоря Всегда же есть две стороны да для кого, Нужен контракт во-первых это
Михаил Непряхин: вы как бы как сервер
Михаил Непряхин: вы же просто. Обслуживаете запросы то есть вы стараетесь Для кого, то вы сервер свой написали Для кого, То для кого, вот для Той вызывающей вас, стороны То есть для м к
Михаил Непряхин: кто-то будет, Вызывать ваш, серверс с помощью Клиента
Михаил Непряхин: и вот для этого клиента вы и стараетесь Поэтому вы с Этой вызывающей стороной ну понятно их может Быть несколько но вот на текущий момент кому это апе было нужно для кого, вы это делаете вы согласовываете, с заказчиком
Михаил Непряхин: этот контракт
Михаил Непряхин: и если все окнули То есть там окнули вы окнули что как бы все нормально Вы по Этому контракту Начинаете работать
Михаил Непряхин: и подразумевается что
Михаил Непряхин: Он ну типа не будет изменяться в процессе ну по крайней мере сильно а если какие то тут изменения будут то они все равно будут не Критичны и как бы и получается
Михаил Непряхин: Раз контракт обговорен заранее
Михаил Непряхин: то вы можете параллельно. Работать. Над своей частью задачи то есть писать сервер а клиент Раз у них уже есть контракт они могут тоже написать свою часть и как будто это будет Одновременно
Михаил Непряхин: и как Быть задача сделаться быстрее то есть идея в этом
Михаил Непряхин: Что типа в противном случае вот когда Мы используем подход Кот фест
Михаил Непряхин: а Мы ну Там какие-то Требования собираем пишем сервак потом показываем и
Михаил Непряхин: Можно Будет использовать наши апе с Помощью клиента
Михаил Непряхин: и типа получается Что Сперва сервер пишется Потом клиент
Михаил Непряхин: ну желательно. Чтобы вы сами клиент еще и писали
Михаил Непряхин: но как бы Опять же все зависит от
Михаил Непряхин: от вас как разработчика что вы с первого сервер пишете потом клиент пишете потом этот клиент отдаете и Уже вызывающая страна может использовать как, этот клиент
Михаил Непряхин: а здесь тебе успех вести что вы вот пишете сперва вот этот вот контракт
Михаил Непряхин: и с Помощью генератора из этого из этой спеки
Михаил Непряхин: ряд спецификации вы сможете, на своей стороне Сгенерировать сервер
Михаил Непряхин: а клиент который будет вас вызывать Сможет сгенерировать по этой апе. По этой спике клиент
Михаил Непряхин: и получается что мы экономим много Времени и У нас и и как бы идея Хорошая светлая
Михаил Непряхин: вот посмотрим как она реализована какие есть минусы недостатки у этого какие есть достоинства тэк
Михаил Непряхин: да как я сказал мне что вот эта библиотека смогу ну как бы считается неактуальной какая библиотека актуальная значит с Помощью чего мы будем генерить
Михаил Непряхин: мы будем использовать библиотеку оао апи
Михаил Непряхин: вот это вот я ее добавил в мейк файл
Михаил Непряхин: и добавил Команду, на инсталляцию этого дела чтобы вы могли просто последнюю версию заинсталлировать тут нам вторая Сейчас актуальная
Михаил Непряхин: значит Это Кот генри Код, генератор смотри на Сколько она популярная
Михаил Непряхин: семьдесят семь тысяч живет ну Тоже как популярная вот она уже генерирует третью версию упы анапе
Михаил Непряхин: и вообще как бы если вы до этого не сталкивались, с опо анапе то вот стоит зайти на их сайт видите когда выбиваете Опыта наперед потом сваги райо и в общем-то вот хотя бы посмотреть какие-то возможности
Михаил Непряхин: ну Или какой-то обзор посмотреть на Ютубе чего Там вообще Появилось Нового ну Там в общем-то Разница с второй версией просто в разных дополнительных возможностях
Михаил Непряхин: и перемены? Можно добавлять и расширять типа все для того чтобы можно было
Михаил Непряхин: ну типа удобнее работать вот с этим вот вот с этим вот документом
Михаил Непряхин: ну спасибо как бы что здесь большой хэллоуин это как был еще признак хорошей библиотеки когда вот вот этот хэлппи
Михаил Непряхин: много текста и видно что чувства стараются расписывают там как использовать как установить взаимности в зависимости от версии и здесь есть примеры
Михаил Непряхин: Использование Этого Дела разные фичи
Михаил Непряхин: ну мы короче будем использовать ее по максимуму здесь есть несколько уровней генераций, вот мы бы он генерить все что можно
Михаил Непряхин: по Крайней мере вот из библиотеки
Михаил Непряхин: и тем не менее кодег генерация и
Михаил Непряхин: потому что допиливать много чего есть
Михаил Непряхин: потому что ну надо обмазать там разными медоварами тобогами и трейсингом
Михаил Непряхин: а метриками и вообще Там как бы много на самом деле косяков
Михаил Непряхин: с Этой библиотекой которые часто живут посмотрим
Михаил Непряхин: Поэтому Мы смотрим базовый функционал то что и
Михаил Непряхин: это все еще Допилено то есть как бы базово берется это но еще много что отпиливается Именно средствами от платформанной команды
Михаил Непряхин: так Ну вот значит какая идея мы изначально тут эту спецификацию пишем
Михаил Непряхин: как мы и пишем Ну вот прям по ручкам да то есть вот нам, нужны ручки значит нужна ручка про файл нужна ручка ну то есть
Михаил Непряхин: у нас тут, профайл пост Это Создание, профиля Тут какой-то самрию
Михаил Непряхин: что регуляр что у нее боди должно быть обязательно что это Джейсон.
Михаил Непряхин: И Схему указываем да вот значит клеит профайл и компоненты и ссылки такие
Михаил Непряхин: и вот Мы говорим значит Что Мы хотим? Принимать интут объект
Михаил Непряхин: при чем, Я его называю сразу так как хочу Чтобы в Коде сгенерированная сгенерированная структура называлась откроет профайл. Импут я ее прямо. Так сразу и называю соответственно у меня есть крейсер профайл. Аутпут
Михаил Непряхин: То есть Вот у меня Входящие своя структура исходящая структура
Михаил Непряхин: Ммм
Михаил Непряхин: так значит Что у нас входящее входящее в основу общих структур, обязательные Поля вот их четыре штуки имя возраста и моего телефона
Михаил Непряхин: и здесь еще расписаны дополнительные свойства у этих полей значит поля нейм это стринга какое-то описание, экземппо ну только для того чтобы когда вы Потом это будете Использовать в каких-то инструментах типа посмана
Михаил Непряхин: У вас дефолт вот здесь вот Вставлялись
Михаил Непряхин: ну вот вот это Джуандо, это вот вставилось и Там речь тридцать это вот вставилось из вот этих полей, Экземп
Михаил Непряхин: также смотрите Тут интересная штука есть что значит Вот Можно указать границы например, что длина этого поля будет
Михаил Непряхин: от трех до шестидесяти четырех а возраст так же вот можно тут Экземпл, тридцать от восемнадцати до Ста, двадцати
Михаил Непряхин: и а идея что и это можно использовать при генерации и вализировать прямо этими значениями
Михаил Непряхин: но дело в том что все библиотеки которые занимаются в редакции, они какие-то косячные сыры и недоделанные и этого функциома по факту у нас Нет
Михаил Непряхин: то есть когда вы ну как бы идея прикольная но она до конца не реализована
Михаил Непряхин: вот мы например, будем использовать имейл
Михаил Непряхин: как Тип, имел вот тут прямо формат имейл то есть Ведь мы могли бы Тип, стринга а формат эйл
Михаил Непряхин: то есть мы еще дополнительно вот как Бы Кот Ген который сгенерирует из этого
Михаил Непряхин: генеральный Код он еще Будет проверять именно на
Михаил Непряхин: соответствие, Регулярному, выражению чтобы ну тут, собачка была чтобы точка была вот эта вот чтобы это было похоже на ию и если, это будет инвалидно то ну как бы на самом раннем Этапе запроса будет отдаваться ошибкам
Михаил Непряхин: Так вот Давайте Посмотрим Что Запустим сермак
Михаил Непряхин: невалидный и Мы его Попробуем Затолкать
Михаил Непряхин: Так это Мы Поднимаем в зависимости только Компост
Михаил Непряхин: Так надо миграции накатить а оно неужели. Тут накачено и
Михаил Непряхин: запустить рок мы с собаками запустили Так пробуем создать.
Михаил Непряхин: Создать. Запрос Окей так а вот про Возраст да то Есть У нас станут в Спике
Михаил Непряхин: указано, было Что Возраст вот минимум восемнадцать
Михаил Непряхин: максимум сто двадцать Давайте если Мы Заткнем семнадцать а Будет ли ошибка От
Михаил Непряхин: а Этой библиотеке Или это Будет наша. Ошибка Аккрест фейет
Михаил Непряхин: Так ну это наша. Ошибка фред влидейшен да это ошибка Не от генерики
Михаил Непряхин: это то Что то есть вот это ошибка она ну
Михаил Непряхин: это то это только если, Мы его Лида все такую Настроили. Если Она Автоматически Не происходит а вот и с мэйлом Допустим собачку Мы Не Сделаем
Михаил Непряхин: вот а вот это ошибка она от вот Этой библиотеки которая с генериром кодом
Михаил Непряхин: Пти пока надо контри с он боди регекс влидейшн
Михаил Непряхин: потому Что. Там это сделано Регекс это регулярное выражение потому что там это сделано на регулярном. Регулярном. Выражении но вот Сейчас посмотрим
Михаил Непряхин: и вот кстати про телефон тоже телефон тоже есть возможность указать
Михаил Непряхин: хотите, я не Стал указывать просто за дело стринга и все
Михаил Непряхин: а но есть сторонние библиотеки в Которых это можно сделать указать но оно опять, же работает косячно
Михаил Непряхин: и еще мне не нравится Что оно вот
Михаил Непряхин: вот так вот отдается не в формате ошибки потому Что у нас Там так-то формат ошибки Он как Бы ну вот Он в жизнь своего Нет Там какой-то формат который Мы выбрали а это
Михаил Непряхин: вообще неведомая зверушка почему оно просто вот отдает Текстом
Михаил Непряхин: Влоги, в логе оно Тоже не попадает
Михаил Непряхин: потому что вот эта вот обработка происходит еще на самом раннем этапе а оно полностью в генеральном коде и мы на это не можем влиять
Михаил Непряхин: лето Первый минус Использование генералки
Михаил Непряхин: что появляется функционал. На который мы не можем влиять потому что он уже сгенерирован в коде и ну не правит ли нам генеральный код да то есть как бы либо нам надо свой Код Ген тогда писать свою версию кудрина ну чем мы занимаемся сторонником компании
Михаил Непряхин: вот Административная Компания коммерческая Компания вот
Михаил Непряхин: Но сами Мы вот ну все равно как бы нам приходится мириться с какими то косяками
Михаил Непряхин: что бы такого Ни было не и
Михаил Непряхин: вот ну Я здесь везде и Моего, валидирую, как Я Моего, также
Михаил Непряхин: Например, вот у нас аут значит Мы отдаем ответ, у нас боди
Михаил Непряхин: та конджик айди обязательное поле это стринга и вот формат в ее еде
Михаил Непряхин: тоже такая же штука что это проверка встроенная в Библиотеку в Генеральную и ее иди Тоже будут валидироваться ей Же.
Михаил Непряхин: То есть Если Мы Сейчас Сделаем
Михаил Непряхин: Ага так Же. С инвалидной ее Иди, сделал на твою удаленную цифру
Михаил Непряхин: вот видите точно, такая Же История вот Это Ошибка
Михаил Непряхин: Она от вот этого вот с Генерального
Михаил Непряхин: кода и тоже мы на нее никак, повлиять не можем ну кроме как взять и убрать просто вот эту встроенную проверку сюда
Михаил Непряхин: вот и соответственно со всеми, и остальными вот этими валитационными историями то же самое что как бы вроде прикольно что они есть или даже из библиотеки которая реализует эту влидацию
Михаил Непряхин: но во Первых сделано кривом а во вторых полагаться на валидацию
Михаил Непряхин: ну как бы вылидаться она очень как бы Серьезная штука да то есть Если здесь будут какие то косяки
Михаил Непряхин: ну мы как бы можем сильно Очень попасть
Михаил Непряхин: тут как бы и безопасность и вообще корректность работы
Михаил Непряхин: именно Поэтому я не полагаюсь навалидацию встроенную вот в эти вот инструменты генерации
Михаил Непряхин: подобное есть и в джерси то есть тоже есть это не вкор функциональная библиотека и это дополнительно просто люди сами пишут
Михаил Непряхин: чтобы можно было аннотировать код дополнительными какими-то вот этими вот ограничениями и автоматически бы это происходило
Михаил Непряхин: а я предпочитаю все-таки Делать Валидацию на Уровне эс кейса
Михаил Непряхин: ну У Меня она здесь происходит когда я создаю профиль Например, вот я здесь внутри эволюции Делаю
Михаил Непряхин: и таким образом я не закладываюсь на то Что аа валидацию сделает контролер
Михаил Непряхин: потому Что вообще по хорошему дело контролера
Михаил Непряхин: принять запрос в удобном, виде для пользователя и отдать его в том формате который ему удобен
Михаил Непряхин: а когда мы на свой контрольров возмогаем ответственность по влидации то они ее могут прошляпить
Михаил Непряхин: потому что опять. Же как: бы вот у нас Есть юс кейс он самостоятельная программка
Михаил Непряхин: Этот визкейс может быть Вызван джералдписи сервером а может быть Вызван х дтп сервер
Михаил Непряхин: и если Вы валидацию Отдаете на свой выше в контролер
Михаил Непряхин: то есть и тогда валидацию должны должен сделать либо. Х дтп сервер либо. Джорджа и сервер то вы где нибудь ее можете забыть либо. Она будет сделана по Разному, то Есть вот у вас, хоть итп Там свояавалидация будет у дерапии Своеоблидаться ну Даже если, вы это делаете вот с Помощью отдельного Метода вот как я здесь сделал
Михаил Непряхин: это банально можно забыть сделать допустим х дтп Вы сделаете а валидацию айджер птицы будете сделать вот Поэтому чтобы Это исключить я влидацию переношу на слой ньюс кейсов даже если валидация какая то есть на уровне контролеров
Михаил Непряхин: а новый Шксон в дт У меня есть консолидация
Михаил Непряхин: вот вы подарите У меня естьвалидация так как я ее делаю
Михаил Непряхин: а я все равно Видел нурнию Из кейса да То есть и контролера
Михаил Непряхин: но Зачем мне полагаться на контроль когда я железобетонно вот сделал ее здесь в нью-йорке
Михаил Непряхин: и ну даже, если ее контролер там тоже валидирует умнее как бы этот контроль там своей жизнью живет а у меня зона ответственности здесь чтобы данные были ввалидные Поэтому закладываться на То что вот Они и здесь придут ввалидные я бы точно Никогда не стал
Михаил Непряхин: и не стал бы доверять там слою раздрабайскому слою контролеров потому что как бы что адаптеры что контролеры это
Михаил Непряхин: ну к этим слоям Требования к оду самые Низкие адаптеры и контролеры могут быть написаны абы как
Михаил Непряхин: и можно Отдать написать джуну и как бы если там какой-то косяк это быстро вскроется и если надо будет переписать То Тоже ну ничего Страшного вот а вот Именно сам ньюс кейс вот он должен быть Написан хорошо и правильно
Михаил Непряхин: Так и
Михаил Непряхин: дальше ну соответственно вот вы описываете все вот эти вот а структуры которые будут на каждые запрос ответ.
Михаил Непряхин: Аа нет тут, нулобу Можно указать тру
Михаил Непряхин: ну с реквардом точно Так же это У Меня чуна вдеет ну понятно Что Она обдает и Не Тут Никакие Не рекларт,
Михаил Непряхин: а например на гет на ноге Тоже, Нет нерегуард
Михаил Непряхин: Так ну у меня, получается юнайтед Накреейт
Михаил Непряхин: а ну вот они все рекорды наклеит
Михаил Непряхин: и это только базовый функционал там если начать копаться в этом Панапе там очень много что еще каких есть Тэгов и
Михаил Непряхин: можно очень
Михаил Непряхин: подробно все эти ручки расписывать Ну понятно дело Что расписываете какие Возможно? У вас ошибки Там двести четыреста четыреста четыре
Михаил Непряхин: Вот и когда вы его описали
Михаил Непряхин: значит нам. Надо из него. Теперь. Сгенерить Сервер
Михаил Непряхин: Ну и сережа клиент ну Вот в первую очередь Сервер значит как. Мы это делаем
Михаил Непряхин: ну как правило с пека живет
Михаил Непряхин: в папке под названием, либо апи называют вот эту папку где находится спека либо дог догс как то так
Михаил Непряхин: доксфорд могут назвать а вот оно наверное чаще я вижу все-таки апе из Этой спеки будут файлы именно, генеральные
Михаил Непряхин: поэтому их принято хранить в отдельные папки обычно в Корне называют Ген
Михаил Непряхин: и здесь просто вот Я указываю Что, это Хтп
Михаил Непряхин: Что, это профаровый Один ну допустим Если у нас несколько доменов в ну и
Михаил Непряхин: вот Мы его называем профайллой- Один, и
Михаил Непряхин: ну и может же еще быть про файл, в два Поэтому как бы здесь важно версионировать уже эту Штуку потому Что у вас Одновременно может существовать первая и вторая версия маппи Поэтому как бы важно их разделять
Михаил Непряхин: и значит демон три папки для клиента для сервера значит есть конфигурационный файл
Михаил Непряхин: вообще у этого Конфигурационного файла есть схема и и и
Михаил Непряхин: ну А в этом файле Там просто
Михаил Непряхин: просто обычным чувством схема ну тоже. Можно посмотреть какие Там поля могут Быть чего Они значат
Михаил Непряхин: Так значит пакет в котором. Будет все Генериться Будет называться Х Дтп, сервер То есть сгенерированный файл. Вот Он Будет вот Он здесь появляется но Показывать удалим Ты Мне
Михаил Непряхин: значит вот этот пакет я хочу чтобы называлось как, Дтп-сервер будут генерироваться для чьи севера Потому что для каждого сервера знаете как бы там своя генералка ну вот есть для конкретно чисел. Для всех остальных роуторов тоже есть
Михаил Непряхин: а модус это что я хочу в модели Генерировать стрик сервер что я хочу
Михаил Непряхин: короче максимально то что можно сгенерить с помощью этой библиотеки
Михаил Непряхин: и вот все что там есть весь функционал он вот здесь через три задается не знаю. Почему именно стриг хотя как бы там не то чтобы простриг а скорее просто Про максимальную Комплектацию того что можно сгенерить
Михаил Непряхин: ну что файл. Будет называться сервер гимн точка гоу
Михаил Непряхин: и это название для структур не Только структур, всего Там и функций, Структур, типов Что я хочу в Кремом Кейсе Это просто типа константа
Михаил Непряхин: и значит я Помещаю в Этот файл, генриет
Михаил Непряхин: в эту Же Папку и здесь
Михаил Непряхин: указываться Голенирейд и какой должен использоваться бинарник для того чтобы изгенерить этот Код
Михаил Непряхин: то есть он должен быть установлен на Компе Поэтому мы его заранее Эту Команду Выполняем как бы на переенсал
Михаил Непряхин: У нас она появляется и и и
Михаил Непряхин: ссылку адрес где Находится у нас спека
Михаил Непряхин: аспекты Находится ну вот Видите выйти, четыре раза Там вот Мы Выходим сюда Раз, два три четыре оказываемся в Корне
Михаил Непряхин: а потом зайти в Папку апии зайти в Папку Хтп и профаровая один ям то есть добираемся до спеки ну и все то Есть он по этому. Конфигу и по Этой спике генерирует нам. Сюда файлы
Михаил Непряхин: чтобы вызвать чтобы вот эта команда сработала Мы вызываем команду
Михаил Непряхин: вот генерайт, мэйк генерал ну она можно сделать просто гоу генирейд
Михаил Непряхин: типа обойти все дерево папок и найти все вот эти вот директивы голос генерал и выполнить их
Михаил Непряхин: давайте, это сделаем
Михаил Непряхин: вот мой генерал логи это другой библиотеке это от моков
Михаил Непряхин: тут просто есть еще вот мокр и Мы бы еще пока Не смотрели ну короче говоря
Михаил Непряхин: это Нет эти логики от нее
Михаил Непряхин: этот Руенапе генератор, он просто молча генерит и все
Михаил Непряхин: а если не было ошибок то, никакого инфолога не Будет значит вот он сгенерил. Нам файл.
Михаил Непряхин: А Давайте добавим его вот аа он сгнился
Михаил Непряхин: и верху с генерального файла стандартно здесь должно быть Написано вот во Первых Дуно эдит все Это и
Михаил Непряхин: то Есть дуно от эдит вам Говорят, не надо редактировать этот файл
Михаил Непряхин: потому что он блин с генеральной потому что чтобы его теперь. Изменить нужно поменять спьяку когда вы спеку поменяете и опять сделаете
Михаил Непряхин: вы Помните вот этот голос генерал а У вас здесь произнес обновление
Михаил Непряхин: и Поэтому как бы это Мы только читаем, Мы только смотрим на этис генеральные файлы и только их Читаем а чтобы изменить их Мы это Делаем через пеку а дальше уже Генерируем заново
Михаил Непряхин: То Же самое с клиентом То Есть Тут Конфиг
Михаил Непряхин: а у Него тоже шел пакет был называться. Х Дтп клиент Он говорит что вот пакет а клиент вернет
Михаил Непряхин: ах ты твой клиент
Михаил Непряхин: это что Это клиент а не сервер что модели нам, Нужны как называется бот файл. Ну и то Же самое что файлы должны быть на заговорки должны быть в Камелкейсе
Михаил Непряхин: вот и значит если Мы их удалим Или изменим то При следующем Вызове мэйк генералитет вот они снова появятся,
Михаил Непряхин: и Это точно такие Же принципы вот ко всему Что, Мы Генерим то есть вот Мы Там иногда генерим муки иногда генерим
Михаил Непряхин: анжерописи сервер ну и какие-то еще Периодически Есть библиотеки которые вот Так вот с помощью генерации делаются он и
Михаил Непряхин: смотрим чего там такое сгенерилось
Михаил Непряхин: ну во первых видите вот он взял. Вот эти структуры как у нас они там Были, в спецификации он их так изгерил,
Михаил Непряхин: добавил, сюда Комментарий а Комментарий этот азиат ну вот эйдж оф д юзер да это вот он взял
Михаил Непряхин: а вот отсюда
Михаил Непряхин: а вот эдж ол, зезер то есть он взял дискрипшн вот этот и добавил, в сюда вот в комментарии
Михаил Непряхин: Джейсон тэгге добавил. Ну это просто вот по вот он взял отсюда ну вот речь с маленькой буквы вот он
Михаил Непряхин: добавил. Его Джейсон тек имейл. И
Михаил Непряхин: ну генератор вот этого и он вот Ю эди значит Давайте посмотрим на Эмма у Него здесь свой
Михаил Непряхин: Маршал. Маршал.
Михаил Непряхин: Для работы с дрисоном и здесь смотреть
Михаил Непряхин: вот и майор, рексп рекс то есть он проверяет нам. Регулярку соответствует ли
Михаил Непряхин: и Причем и на дикойдинге и на эннкодинге ведь, он тоже, здесь проверяет соответствуют ли регулярки строка о регулярке вот Этой вот тут, константа ш
Михаил Непряхин: тут, длинная регулярка ну смысл в том. Что она просто это проверяет
Михаил Непряхин: на соответствие и моего ну прям скажем не читаемая когда фигня но
Михаил Непряхин: вот и Поэтому когда мы делаем невалидную вот это хотим, создать инвалидные имей
Михаил Непряхин: то мы от нее и получаем эту ошибку вот от Этой проверки
Михаил Непряхин: а вот здесь вот ошибка ира, волейдейшенный мэйл, вот Она и мэллоу фейерверк в Лидеейшн
Михаил Непряхин: фэй в тупе с Рекомендающим то Есть вот Она
Михаил Непряхин: и так как Она здесь захорожена и все это вообще находится в сторонней библиотеке и видите мы на это как бы особо влияния не имеем и можем только либо с этим мириться
Михаил Непряхин: либо просто, это не использовать ну я просто, предпочитаю это не использовать я вам здесь просто, показал ну тоже встречаюсь что, это юзают но я вот вместо этого просто предпочитаю использовать старинги
Михаил Непряхин: на тойсмен мы берем и на кеет профайл
Михаил Непряхин: вот у нас креет профайл значит мы говорим. Не Хотим, мы валидацию и моего нас мы Хотим, просто как стринга удалили
Михаил Непряхин: сделали изменение, спики теперь мы можем запустить заново генератор
Михаил Непряхин: и оно вот видите поменялось значит аа, здесь теперь вот ведь как Раз, такая изменилась была вот этот тип, мэллоу здесь теперь стринга
Михаил Непряхин: ну и все теперь, когда Мы будем Делать
Михаил Непряхин: запрос вот этот вот с невалидный мейл. Мы уже получим ошибку Не, вот эту вот из генерики а нашу из бизнес-логики
Михаил Непряхин: как серверна сбер запустить
Михаил Непряхин: вот видите теперь. Мы ее получаем от нашей. Библиотеки в лет десять
Михаил Непряхин: и ну во-первых Мы можем контролировать вывод Но во-вторых Мы еще и логики ее начинаем видеть потому, что До этого Мы и вот этого лога тоже Не имели вот как бы что хочу сказать этим Самым
Михаил Непряхин: Идея Интересная тем что вот как бы Есть такой функционал и вот с этим то же самое. Но видите оно М Реализовано криво и Неудобно
Михаил Непряхин: итак во всем с генералкой То есть оно вроде Бы что-то облегчает но с другой стороны создает неудобство
Михаил Непряхин: Поэтому ну как Бы спорный подход.
Михаил Непряхин: Вроде, как победивший но чего-то Не Особо все Говорят, живут программисты Не Любят, этот подход. Программисты Любят, Кот фест
Михаил Непряхин: Далее что. Еще тут ну ее иди ладно ее иди Тоже. Здесь собственно этот Собственный тип ее идеи Но это просто.
Михаил Непряхин: Просто. Наш йо иди который от глубловский. У нас он в коде точно такой же используется
Михаил Непряхин: то есть здесь как бы это ладно можно ставить
Михаил Непряхин: ну с ошибкой да тут, как бы это Тоже сгенерировать ну и Так далее вот гет профайл. Видите Тоже здесь оно
Михаил Непряхин: все сгенерировалось аа насколько вот это Нам облегчает. Жизнь ну
Михаил Непряхин: ведь у нас и Так есть эти структуры детошные то есть Мы и Так их писали но вот клеит профайл да для того что вот гет профайл здесь просто профайл за ним бежен и как бы вот он ну он в конечном итоге точно такую Же структуру имеет
Михаил Непряхин: Поэтому то Что. Для нас генерировали эти структуры, ну как бы, сомнительно на Окей короч
Михаил Непряхин: так давайте посмотрим чего он Там, еще наденет вот значит он сгенерировал.
Михаил Непряхин: Интерфейс сервер интерфейс это как Раз вот та часть которую Мы должны сами реализовать то есть Мы должны
Михаил Непряхин: а даже нет ни эту часть другую часто Там еще есть интерфейс
Михаил Непряхин: это как вот если, не стриг точ, если Мы делаем Не стрит то Мы вот эту вот штуку, реализовываем вот эти вот методы
Михаил Непряхин: у себя в ходе а Мы выбрали стриг Поэтому Шас
Михаил Непряхин: у нас другой должен быть интерфейс энергии интерфейсе ну здесь генерировать Шестьсот строк
Михаил Непряхин: Казалось. Бы вроде бы Не хотелось бы создавать но он собака заставляет Это Делать
Михаил Непряхин: вот он значит вот видите где то в середине кода Оно Там Это все между собой хитрым образом Спетено ею
Михаил Непряхин: ну когда Оно ведет себя как-то Странно ну вы Потихоньку изучаете вот эту Генеренку волей-неволей. Значит У нас есть и
Михаил Непряхин: вот как Раз, отстриг сервера как бы максимально аа контрактик
Михаил Непряхин: который выглядит как в над названии Метода то есть Мы должны вот этот интерфейс реализовать
Михаил Непряхин: Мы будем получать уже Готовый объект а он но Через несколько прагматий Еще Через проксю
Михаил Непряхин: вот в конечном итоге то есть вот этот объект Мы к нему можем получить доступ и взять оттуда
Михаил Непряхин: Что к нам. Пришло в запросе
Михаил Непряхин: а в этот Объект Мы тут он и шутит разливан через интерфейс со мной Найдем вот он а этот ответ. Он будет вот отдавать э ну вот если, все хорошо двухсотку
Михаил Непряхин: вот ну и опреки Шансон. Тоже, добавлять то есть вот Там Мы До этого если, посмотреть как Мы до этого писали
Михаил Непряхин: наш сервачок а вот Мы здесь вот в Обертке Джейсон
Михаил Непряхин: Видите вы тоже Писали что контент тайп Отоплеки. Шансон сами
Михаил Непряхин: энкодели Это все дело То есть видя Как Будет эта Верточка Халпер а здесь Вот он за нас
Михаил Непряхин: а это сгенерил. Он Тоже типа вроде как молодец ну похожий вещи делать чтобы Мы и сами делали двести вот отдает а мы его тоже и
Михаил Непряхин: здесь статус окку тоже двести одна валя
Михаил Непряхин: а и плюс он с генерию очень много Всякого Вспомогательного кода который и
Михаил Непряхин: очень Плохо Читается потому Что и
Михаил Непряхин: ведь тут Всякие привидения типов Используются в Обильно пустые Интерфейсы и прочее ну то есть Кот Прям Выглядит страшником
Михаил Непряхин: теперь, значит посмотрим как это использовать Вот Мы сгенерией как это использовать значит Вот Мы а
Михаил Непряхин: ну Если, Помните вот Сейчас вот как бы предыдущую Версию, вот я запишу покажу
Михаил Непряхин: значит вот у нас здесь какая История была ну вот мы говорили коин сент пойнт и для каждой ручки прописывали свой Обработчик, ну и вот Они у нас Здесь жили
Михаил Непряхин: пост метод профайл. Мод запускается вот этот Метод вот кричит профайл.
Михаил Непряхин: Здесь Же чуть по-другому ну вот эта, часть та Же самая вся, мидровары тоже можно подрубить это все работает
Михаил Непряхин: а вот здесь дальше вот в этом месте
Михаил Непряхин: у нас мы не прописываем все пути руками
Михаил Непряхин: потому что, они же вот здесь уже были прописаны
Михаил Непряхин: ну вот в этом месте вот профайл и Там Какой метод да
Михаил Непряхин: вот это вот все и оно живет уже Там внутри, в Генеринке Поэтому Мы просто подрубаем вот это и
Михаил Непряхин: так надо
Михаил Непряхин: это черт это обязательный аргумент тут, короче могут Быть Мимо Вары Там Еще Тоже сложная система своих мигалвар
Михаил Непряхин: короче Там небольшой такой свой мир.
Михаил Непряхин: В котором Тяжело разбираться и каждый Раз, когда Я разбираюсь Потом забываю как он устроен ну короче там вот здесь есть возможность Прописать эти, миноборы
Михаил Непряхин: как будто бы нам мало своих методов варок можно Еще добавить
Михаил Непряхин: и хендлер формукс короче говоря этой функции Мы биньдим Наш роудер который вот Новый который Мы здесь сделали,
Михаил Непряхин: с вот этим вот чтобы подрубить роты
Михаил Непряхин: вот ну в общем То же самое что Мы делали руками только Там о Многом тепло уже Внутри Прописано
Михаил Непряхин: и дальше Мы должны удовлетворить интерфейс вот здесь вот хэндлер фроммукс он принимает вот сервер интерфейс
Михаил Непряхин: А как Раз, вот вот этот вот интерфейс ну единственное что он тут и а
Михаил Непряхин: Там ключе они Всякие обертки используют и Мы должны ну Я Показывал стриг интерфейс реализовать
Михаил Непряхин: Так Вот этот старик интерфейс Мы реализовываем Мы пишем вот У хендлеров Ну, здесь Внутри Тоже самое Тоже структура хендлерс вот этого один это ничего Не Меняется Но вот Эти, вот сигнатуры Они другие
Михаил Непряхин: то есть если там до этого у нас Это, были Сейчас покажу
Михаил Непряхин: стандартная Сигнатура. Вот такая вот типа спонсорайтер и реквест То Есть просто Стандартного сервера
Михаил Непряхин: То здесь как Бы вот это вот оно где-то Там под капотаем в генеринке
Михаил Непряхин: а Мы Видим Уже полученный Реквест в объекте
Михаил Непряхин: и Уже работаем непосредственно с ним то есть типа еще один слой абстракции повыше и вот Мы Уже работаем с Этим Самым Абстракцией
Михаил Непряхин: аа значит вот Мы здесь Реквест получаем Реквист. Это вот с генериной через трибокси вот этот вот Наш объект
Михаил Непряхин: То есть как Будто, бы молод и из него получаем вот этот затейший мой внеймфоун а Не из боди то есть вот Раньше, Мы
Михаил Непряхин: вот предыдущая версия Как Мы делали создаем дто
Михаил Непряхин: дто это наш собственный У сети минэ мейдж и мэллоу
Михаил Непряхин: Которые Своими руками это писали а Там Мы и его генерал Не имеем и поэтому Мы
Михаил Непряхин: создаем все равно нашето
Михаил Непряхин: вот Мы его сама создаем почему потому Что Мы же будем использовать тот же самый. Из кейс а он принимает дто который нам. Надо
Михаил Непряхин: Поэтому Мы просто берем вот этот объект который с генериной ликвист достаем Оттуда ими возраст
Михаил Непряхин: оно ответит уже не надо приводить аа к моему
Михаил Непряхин: потому что это не так уж и моего стринга Мы То что поменяли
Михаил Непряхин: вот и после этого вот Начиная с этого места
Михаил Непряхин: ну Мы работаем так как Будто бы все у нас вот дто Есть просто Другой способ заполнение этого дто
Михаил Непряхин: и Ошибка По-другому обрабатываться значит Если риски Свернул Ошибку
Михаил Непряхин: ну Там нам. Надо Ее в контекст положить Мы же Помните Там и сделали Что Мы кладем ошибку в контекст
Михаил Непряхин: и Потом изменил. Вары этот эту ошибку Достаем и Блогеруем вот для этого чтобы положить ее в контекст вот здесь ээ немножко, изменило вот эту функцию
Михаил Непряхин: вот а дальше здесь свои собственные обертки Для ошибок
Михаил Непряхин: ну это вообще Для ответов то есть видите он вот Этот клеет профайл. Он Сгенерировал свои. Собственные крейет профайл. А для ошибок структурки
Михаил Непряхин: и мы их соответственно вот тут прокидываем что, Если, ошибка вот она вернулась мы ее возвращаем Ошибку, и Если, все Окей то мы вот возвращаем вот эту Ошибку,
Михаил Непряхин: крелейтаут Путано то Есть это как бы Тоже, алиас
Михаил Непряхин: вот это на самом деле это алис над
Михаил Непряхин: вот этим вот клеит про файлаут
Михаил Непряхин: вот и случай аут потому Мы до того уже не используем то есть и
Михаил Непряхин: и это тоже накладывает некоторые неудобства Начиная с и
Михаил Непряхин: плюс вот эти вот два Две структуры вот эти отличаются лишь Тем, что, вот здесь четыреста А и
Михаил Непряхин: А здесь двести и это Блин ну
Михаил Непряхин: ну Плохо Читается короче это тут Тоже можно Накосячить
Михаил Непряхин: и как бы Не Углядеть. Допустим, Там в ошибке, ошибиться, и вот эту часть как Видите Мы все равно вынуждены писать руками
Михаил Непряхин: вот и Поэтому получается Что если Мы Смотрим вот так вот на сервер вот То, Что Мы руками писали
Михаил Непряхин: и То Что У нас с генеральное а Мы Потом все равно руками Писали как Будто Профита особо Нет
Михаил Непряхин: Будто Доставляется много неудобств и профита особо Нет это правда так
Михаил Непряхин: то есть генералка сервера она ну вот она такая вот как бы я в ней плюс вообще Не, вижу
Михаил Непряхин: но плюс есть в том что клиент генерица вот вот как бы уже Там прям много что генерируется и много что облегчает. Жизнь
Михаил Непряхин: Сейчас Мы давайте. Сделаем паузу, и посмотрим клиент Так через пару минут задохну
Михаил Непряхин: Так возвращаемся по генерации сервер если появились идут какие-нибудь Вопросы, или пока Все понятно.
Илиас Эззахид: Можно голосом вопрос ро
Илиас Эззахид: а что Если Вы сказали что вот слишком углубляться в Лагере Не Стоит Там формате показать Радиостанцию
Илиас Эззахид: а Что Если Там Аналитики Или клиенты скажут Что Мы хотим, более подробную свадьбу Документацию.
Михаил Непряхин: Вот в Этом и проблема, что скорее всего У вас компании Где будет работать все-таки будет Это нормально сделано По-человечески чтобы на это можно было повлиять
Михаил Непряхин: ну есть конечно вариант вмешиваться в вот эту Гененку, он допустим вот вам вот
Михаил Непряхин: досталась пека а Там уже прописан
Михаил Непряхин: и мы его заменили да мы допустим У вас уже вот так вот и все значит и без вариантов и
Михаил Непряхин: надо с этим что-то делать ну либо страдать
Михаил Непряхин: просто? Видите какие недостатки ну ошибки там немножечко другие получаются может быть это не критично да просто? Иногда это Важно Иногда неважно
Михаил Непряхин: либо и но он
Михаил Непряхин: Я Даже встречал такую тему, что скрипты писали Башню как-то писали и Поиском Замены меняли какие-то строки Но это прям костыли костыли Поэтому вот Есть как бы компромиссы Есть потери Которые Мы испытываем когда Мы Работаем с Кот геймом вот
Михаил Непряхин: ничего Не сделать Я сам испытываю гореч по этому поводу
Михаил Непряхин: понятно, пока Почему Не Очень любится прекрасный подход. Да,
Михаил Непряхин: и непонятно о чем Использует ну короче говоря смотрите когда вынос о пьесах
Михаил Непряхин: вот лайфхак такой значит на собесе когда вас спрашивают какой подход. Ну такой Кавер За него продает вот а как вы вот в сервера пишете
Михаил Непряхин: эээ типа какие подходы знаете вот это вот там вот Кот фест спек фест надо право вот эти слова обязательно проговорить
Михаил Непряхин: потому что. И сказать что. Ну я умею и Конфедерация испекст типа что. Внушался пек фест прогрессивнее ну Или как То так надо намекнуть что как бы я в Курсе проспект жест и я как бы Умею
Михаил Непряхин: вот и все Эти, архитекторы там платформенные команды и Эти товарищи они все Топят, за спеккрест но по факту
Михаил Непряхин: а программисты настолько сильно этому сопротивляются что и но просто знать его и
Михаил Непряхин: на апе У вас уже есть свадьба Аспека и Там, Происходят частые изменения
Михаил Непряхин: ну блин с другой стороны если Там, Будет Изменение в лицо, в кодексе будет отменять понимаете я бы понял, если бы вот этот подход он прямо вот и вот эту часть уже генерил
Михаил Непряхин: но Ведь нам все равно надо как-то связать нам надо ю кейс его вызвать хоть как-то если эта Штука все равно остается на наше Усмотрение
Михаил Непряхин: Поэтому да Сейчас Мы посмотрим клиент Там Действительно Есть какие-то более-менее очевидные бонусы Что Мы много Кода
Михаил Непряхин: Экономим ну как Бы Мы Не Пишем этот код клиентов
Михаил Непряхин: бог с Ним типа сервер Мы тут написали Но зато клиент и потом автоматически генеральный Мы почти сразу Можем использовать вот в этом Есть небольшой плюс
Михаил Непряхин: Так вы упомянули Есть Уай или отдельно прирушиваться ну юань куча ну а-ля да вот этот скриншот а оно
Михаил Непряхин: есть библиотеки которые просто из вот этого в этапе, делают, ну вот этот свагер вот этот красивый ну который все знаете которую Видели Вот ну А-ля
Михаил Непряхин: Аля Вот такой Вот То же самое типа будут вас поручки отдаваться.
Михаил Непряхин: Короче отдельно можно Прикрутить
Михаил Непряхин: Так ладно дальше значит про Клиента
Михаил Непряхин: клиентская часть у нас соответственно тоже с генерина
Михаил Непряхин: понятно, Что Структуры тоже эти генерация а Так
Михаил Непряхин: Сейчас сразу посмотрим как это дело использовать значит вот до этого
Михаил Непряхин: мы тут вот клиент писали сами Помните да вот клиент
Михаил Непряхин: с тайм-ауттами вот креет профайл, вот клиент так выглядит ну довольно громоздко правда шестьдесят строк
Михаил Непряхин: э нам тут надо вот эти структуры Ведь эти ложки Мы сами писали Там они за нас
Михаил Непряхин: визите с Генриной.
Михаил Непряхин: И ээ это сами писали потом вот этот мар Шилинг
Михаил Непряхин: а реквисты вот эти Ведь здесь мы писали конкретный урал и много технического вот этого кода Что заголовок при кэшан добавляли Что Там потом выполняется запрос боди надо закрыть
Михаил Непряхин: проверить код ответа то есть здесь Действительно много какого То, такого бойлерполитного кода в который вот Кот Ген как бы делает проще
Михаил Непряхин: а дерид профайл. Ну Давайте Сраним склеет профайл. Да вот крей профоровшись от строк в случае генералки как Это выглядит
Михаил Непряхин: ну. То Же самое как бы опять Же руками с романом вот пописать как по-другому хоть как пишем руками
Михаил Непряхин: А прописываем какие-то пути А здесь конфликт точно такой же
Михаил Непряхин: и ручка креет профайл. Выглядит уже короче
Михаил Непряхин: А нуди себя поменял этот ямейл.
Михаил Непряхин: Приходится исправить из правил. Объяснил а и
Михаил Непряхин: то есть. Там У нас был шестьдесят строк здесь Тридцать ну два раза короче получают функции оружия как Будто прикольно Ну Правда как бы здесь меньше Кода и в Принципе Он простой понятный
Михаил Непряхин: То есть в Любом Случае Обертку приходится писать Потому Что Мы тут Кот ответы должны проверить и какое То Там Поведение. Настроить Но Тем Не менее
Михаил Непряхин: как будто бы здесь мы имеем профит делизпрофайл
Михаил Непряхин: уделит профайл. Тут у нас и так был короткий, То есть Это вот наша версия которая Кот фестом ну здесь уже меньше кода где он клиент дул закрываем боди
Михаил Непряхин: в генералке делит ну еще короче да то есть тоже просто вызываем нашу с генеральную функцию Проверяем статус
Михаил Непряхин: Что. Если Это Не Новый контент Не Двести четвертый да То Мы Отдаем Ошибку
Михаил Непряхин: вот и гет профайл он гетет профайли смотрите Тоже, короткий код А гит урфай у нас здесь был очень длинный Раньше вот мы руками когда писали гет профайл но вот эта структура Тоже, знала у, нас генеральная
Михаил Непряхин: а и и вот ну статус коды Мы все равно проверяем как видите
Михаил Непряхин: здесь Мы еще ноут фаунд проверяли а тут, она просто забыла Нет вот нотфан Тоже, да да
Михаил Непряхин: вот я проверяю но нот фаунд если Не, двести четыре тогда ошибка а если нет то вот здесь уже начался Окей здесь на дре сон двести вот видит уже структура Джейсон двестиникет Про файлаут пут
Михаил Непряхин: вот что Там шоп дейд ну тоже торнлейд довольно Короткий А здесь сам действует подлиннее короче в
Михаил Непряхин: генерации клиента как Будто все таки профит какой то, есть
Михаил Непряхин: так Сейчас давайте, проверим тесты м тест, и вот я написал один Раз я единственное что здесь Сейчас поменял Это Вот Вот эту Строчку что Я короче подсовываю его
Михаил Непряхин: У Меня здесь был клиент Профиля Вот Я его Раньше, Использовал Вот Этот Вот
Михаил Непряхин: из вот этого пакета. А я уменяю вот на этот вот на Наш с генеральной
Михаил Непряхин: вот а все остальное то же самое
Михаил Непряхин: как Будто, они Сейчас пока Не, нужны вот
Михаил Непряхин: и проверим цивилизационные тесты отрабатывают вообще Или Нет вот я Там менял, поле симо его Сейчас надо Убедить что оно отрабатывает
Михаил Непряхин: да вот как бы все нормально так отцом тесто работы а
Михаил Непряхин: и здесь еще экземппа У я добавил файлик ну это а-ля интеграционный тест и только вот в таком простом виде для дебагин какого-то пощупать потрогать тут небольшую Инструкцию написал
Михаил Непряхин: как это использовать ну то есть это просто надо мои функции вынести и назвать пакет мейн ну вот это все
Михаил Непряхин: и тоже можно запустить но это по сути тот Же самый интеграционный тест только в одной функции
Михаил Непряхин: так Сейчас посмотрим комменты
Михаил Непряхин: если спрашивают у прошлой компании какой подход, использовали ответ Сначала успех связанный потом прошли на контрас не с
Михаил Непряхин: сперва код фест А потом перешли на спек фест короче надо подчеркивать что вы прогрессивный и вы спекфест как бы использовали
Михаил Непряхин: Любят программисты Любят Кот фест все остальные менеджеры проч Любят спех вест но вот
Михаил Непряхин: можно использовать Кот Ген Чисто для клиент Можно Можно
Михаил Непряхин: а Указав Пути к за то, Можно
Михаил Непряхин: понятно, что Можно что то, как то, комбинировать но вообще вот Так вот вот то, что я вот вам показала да
Михаил Непряхин: вы ну в Случае клиента как бы ладно там ничего такого Нет но и То тоже знаете бывают случаи когда и
Михаил Непряхин: хочется вмешаться вот Например, Вот-вот сюда куда-нибудь хочется Раз что-нибудь влезть и что-нибудь сделать а если. У вас это все Сгенерировано вы это Не можете сделать ну в случае Клиента это ладно как бы Не Так страшно а вот Случай сержра
Михаил Непряхин: и это прям ну часто бывает когда у вас там какая-нибудь ручка есть а здесь у вас по Сути все от вас скрыто
Михаил Непряхин: что, вот вам пожалуйста, запрос ну. Вот эта структура которая к вам пришла
Михаил Непряхин: дальше вы запускаете эс кейс и все и структура на Выходе
Михаил Непряхин: как бы с одной стороны хорошо что, как бы ты в контроле уже ничего лишнего не сделаешь вот контроль он отвечает, только за это получить, вызвать логику отдать вот ну иногда здесь тоже хочется чего-нибудь вмешаться и что-нибудь сделать
Михаил Непряхин: с этим подходом Мы уже связаны по рукам ногам потому что у нас Там очень много в генеральном коля плюс если вдруг че то ведет, себя не так как вы ожидали
Михаил Непряхин: то вы тратите очень много времени. На то чтобы отбажить и прямо, скажем. Неприятно и
Михаил Непряхин: короче дувацкий непонятный запутанный код ват
Михаил Непряхин: Я лучше на своих на своих Предпроектах Я за аспект сейчас Никогда не использую Ну потому что мне знать не надо
Михаил Непряхин: Биг тех один Ну декларироваться что типа да что типа все должны теперь все сделать Но
Михаил Непряхин: не знаю как. В Зоне. Его вита наверное Там по Другому и нельзя
Михаил Непряхин: скорее всего Но в других Компаниях все Говорят что на заспекх жест
Михаил Непряхин: по факту Я говорю Куда ни залезть тут Кот Шест Я даже
Михаил Непряхин: может быть один Раз, Я видел проектныйспект Чести но кстати вот много Проектов вижу да аспект Сейчас никто Не использует но все Говорят, надо надо надо
Михаил Непряхин: в общем Не знаю здесь вот какая такая фигня происходит Видите как бы Кот гену уродует Кот и многие вещи От, вас скрывают и Делают неизменяемыми и как бы как это может нравится программисту который хочет блин Ну как то Куда гибкость имеет да
Михаил Непряхин: нравиться не может я забыл. Клиент делается для тестирования
Михаил Непряхин: Ну для двух целей клиент делается во-первых для тестирования нами самими
Михаил Непряхин: а во вторых для того чтобы вызывающая сторона просто взяла вот у себя подрубила наш клиент как библиотеку
Михаил Непряхин: и в том другом сервере который будет нас вызывать о сервисе в том другом сервисе который будет нас вызывать она смогла бы использовать вот эти вот все заранее заготовленные функции, типа это же удобно просто, ничего не надо клиен писать он уже готовый
Михаил Непряхин: как бы это для комфорта работа и с той стороны и чтобы к вам вопросов Не Было потому что
Михаил Непряхин: ну в написании клиента можно Же ошибиться
Михаил Непряхин: и если вы его сами написали здесь
Михаил Непряхин: То как бы вы уж точно понимаете как оно должно работать
Михаил Непряхин: и вы тут ошибки как это правильнее обработали ну вот банально даже вот видите его пакет профайер да я вот обрабатываю здесь отдельно но фаунт я вот это руками написал То Есть это У меня Там вот там-то Внутри вот это вот генералное да но вот эти-то штуки Я руками Прописал
Михаил Непряхин: и если бы я это сам не сделал и не протестировал. Что, оно Работает как надо То
Михаил Непряхин: тот кто То Другой он тогда Должен был бы сам написать этого Клиента а он мог бы здесь как нибудь ошибиться. Или ну конечно тут можно ошибиться. Да ну чего нибудь мог бы все равно и
Михаил Непряхин: Поэтому Мы клиент пишем для себя для тестирования
Михаил Непряхин: и Автоматом бонус для тех кто будет нашим сервером пользоваться
Михаил Непряхин: некомфортно что в роботах Например, Теряется явность невинно к ее руки Кеннера Есть
Михаил Непряхин: да Это тоже и Это тоже вот оно становится вот там под капотом Внутри при чем оно там
Михаил Непряхин: так закопано но давайте Сша. Найдем вот кэйд профайл, так
Михаил Непряхин: с Этой стороны не размотать Сейчас поразматываем
Михаил Непряхин: вот Эти, залиловки контентайп,
Михаил Непряхин: ну вот он да ведь типа здесь глупый вот э, вот Это по Сути же то же самое
Михаил Непряхин: только но в Генералке его Там скрыто то есть Мы то это сами писали руками ааа
Михаил Непряхин: а здесь видите вот борис гуру плюс вот это вот плюс какой метод и какой бот обрабочек то есть это вот уже с генеральное креедет профайл ну то есть как бы здесь похоже как мы пишешь пишем плюс мидл вары все там их тоже Тут Можно добавлять но добавлять
Михаил Непряхин: и Еще сильно все это дело усложнить вот в общем вопросов много
Михаил Непряхин: Так Ладно Давайте Если Еще просто тут Есть по спекшес Подходу
Михаил Непряхин: задавайте Вопросы, Если Нет тогда пошлите Дальше
Михаил Непряхин: Так Ладно У нас вопросов нет Давайте посмотрим значит У нас тут Еще Есть Темы. Которые надо добить
Михаил Непряхин: Все и Так Поговорим Еще про тесты значит и ну Простой Тест Обычный тест
Михаил Непряхин: рекомендуется Нам Делать Папку нижнее Подчеркивание тест От пакета
Михаил Непряхин: тест должен находиться в Файле нижнее Подчеркивание тест если Он Не Будет находиться в таком, файле с
Михаил Непряхин: сурфик сантеста то он не, запустится
Михаил Непряхин: значит вот допустим есть функция эт
Михаил Непряхин: просто плюс быть делом Хотим? Ее протестировать называем функцию тест
Михаил Непряхин: потом название ну Еще часто можно увидеть вот так вот люди делают для того чтобы
Михаил Непряхин: разграничить, как бы ну Более осознанное название дать тесту слушай кремл. Кейс когда тесты длинно называются мне дочитается хуже
Михаил Непряхин: в аргументе тест должен Принимать только Один аргумент вот Тестинг,
Михаил Непряхин: это короче просто из стандартной библиотеки Тстинг, вот это вот чтобы
Михаил Непряхин: ну вот этот красивый вывод тестов происходил,
Михаил Непряхин: здесь мы чего делаем запускаем Функцию говорим что ожидаемый результат пять
Михаил Непряхин: если результат который Мы получили Не Равен. Ожидаемому то Мы пишем ошибку
Михаил Непряхин: при Обычный кач самый. Простой тест
Михаил Непряхин: ну можно спустить на улице и запустим ну вот пес прошел
Михаил Непряхин: значит есть такое явление в гоу как табличные тесты это когда мы заранее видите тут слайс из анонимных структур
Михаил Непряхин: анонимные структуры с Тремя Полями первый аргумент и ожидается Что
Михаил Непряхин: и Мы до Сих. Пор тестируем нашу Функцию это
Михаил Непряхин: просто мыйти поговорим вот два плюс три должно быть пять ноль плюс ноль должно быть ноль
Михаил Непряхин: стоп, в сторону должно быть двести
Михаил Непряхин: и запускаем ну и тут может быть очень Большое количество тест кейсов То Есть Это
Михаил Непряхин: актуально тогда когда У нас Действительно Много-много кейсов Лениво Отличаются как бы немножко. И Мы Хотим, вот их всех проверить вот и здесь Мы запускаем целый. Фор вот по Этим нашим Тесткейсам
Михаил Непряхин: и и
Михаил Непряхин: ну если не Совпадает, то мы соответственно пишем Ошибку и тут, какие аргументы Что мы делали и почему так Получилось
Михаил Непряхин: Что то проверяемся Окей если, Вдруг, шипка то вот он
Михаил Непряхин: Один, прибавляли минус Один, должно быть ноль ой Получилось ноль Рождается Один, и хочу По Ним первому эээ
Михаил Непряхин: Рождается ноль
Михаил Непряхин: Так и это получается Без Использования сторонних пакетов просто вот то что есть стандартная библиотека
Михаил Непряхин: но вот это вот писатель и неудобно
Михаил Непряхин: и есть более Удобная Библиотека Этой стефании
Михаил Непряхин: значит которая имеет себе очень популярную. Библиотеку на удивление сколько там Звездочек
Михаил Непряхин: Двадцать пять тысяч звезд короче Популярная Библиотека и Там мог есть и все что нужно
Михаил Непряхин: состоит библиотека из двух абсолютно Аналогичных библиотек а одна называется орт, вторая называется регуляр и это один в один одна и та же библиотека
Михаил Непряхин: но то есть там одни и те же методы одни и те же функции все Одно, и то же Они одинаковые полностью просто орт,
Михаил Непряхин: когда происходит ошибка не останавливается ничего и тест продолжается идти дальше ареквайр
Михаил Непряхин: до первой попавшейся ошибки когда Пошибка произошла Мы останавливаем Тест здесь и Сейчас то есть в каких-то случаях Мы хотим, Делать из серд каких-то трекуй Я почти Всегда Делаю Про старик вай
Михаил Непряхин: то есть если произошла ошибка Мы все останавливаем я вижу ошибку здесь и Сейчас ее дебажу и Идем дальше ну а серд соответственно
Михаил Непряхин: а получается когда У нас есть Куча тестов и если там пяток тестов Не Прошло ничего Страшного главное чтобы все остальные Пошли тогда Ммм
Михаил Непряхин: эээ удобно использовать орт, с Другой стороны Эриквайер обязывает делать такие тесты Которые должны. Все проходить потому что. Во Всемшине типа какие тесты Не Прошли ну и
Михаил Непряхин: ну и ничего типа Страшного
Михаил Непряхин: ну команды с тестированием вот как. Бы гоу тест а потом Мы говорим Что Хотим, тестировать текущую папку вообще все дерево папок обойти а минус Кант Один это отключается каширование внезапно
Михаил Непряхин: бомба синтаксис по Мне так очень классно не пей
Михаил Непряхин: значит ну в вербоус, подробнее подробнее Делают,
Михаил Непряхин: Так можно запустить конкретный тест Один ну то же самое. Когда вот Мы Так Делаем и
Михаил Непряхин: вот как выглядит значит работа с библиотекой три ты стефай ну этот аргумент мы все равно не, меняем он так и остается но он используется от библиотеки осед как первый аргумент
Михаил Непряхин: и вот там есть вот эти вот функции, на все случаи жизни типа ну самый популярный икво ну Что и
Михаил Непряхин: и мы просто проверяем Что они равны а если Не равны и будет ошибка
Михаил Непряхин: ошибка довольно человеческая и понятная то есть вот что ожидалось один два три актуальный результат один два четыре но здесь тоже ведь
Михаил Непряхин: кликту сиди френд
Михаил Непряхин: так но ты к вам Что они Не равны Что как бы они Не Должны быть равны если. Все Окей то ошибки Нет
Михаил Непряхин: ну Тут проверка на ней ну Это самая Популярная да какая-нибудь функция возвращает Ошибку и Мы можем проверить Что она Нот нил. Либо шла на Ниву
Михаил Непряхин: то Есть, Это опять же сокращает ну вот как У меня в этом пакете где-то У меня тест
Михаил Непряхин: видите здесь вот все ошибки вот Они ну ирра антон но нил, нургалиев то есть сокращают Не надо писать ифы Они как бы Там
Михаил Непряхин: в одну Строчку полчаса спишут а Здесь подразумевают Шп Нот нел. А если не нил. То ошибка
Михаил Непряхин: когда Должен быть нил. Так
Михаил Непряхин: Ну то же самое с Эквайр то Есть ведь отличие функции, Один в один и те же самые, просто здесь пакет был остерд и если происходила ошибка он шел, дальше а здесь реквай первая попавшаяся ошибка и он дальше не идет,
Михаил Непряхин: ну получается вот Допустим если, у вас здесь ошибка то остальные то есть если, он проверит а там
Михаил Непряхин: ну он здесь падает потому Что это получается на чтоб цикл, конь был так дальше
Михаил Непряхин: дальше а покрытие покрытие кода ошибками о покрытие кода тестами прочий пример есть у нас
Михаил Непряхин: три Ошибки ошибка для телефона телефон Начинается не Семерки телефон должен состоять только из Цифр, и у нас есть функция валидации Куда Мы Передаем телефон и вот Проверяем на Длину
Михаил Непряхин: на а Что первый символ семерка и Что длина
Михаил Непряхин: тут я телефон перевожу в роны и в ронах проверяю Что длина между нами Девяти если нет это ошибка
Михаил Непряхин: Так и я бы хотел, сделать тесты Написать тесты на эту функцию
Михаил Непряхин: Так я пишу вот Табличный тест
Михаил Непряхин: я соблюдает имя телефон хочу ли я ошибку ну это просто имя тесткейса что проще Было найти когда он упал
Михаил Непряхин: так и вот Обычный, Табличный, тест так запускаем смотрим
Михаил Непряхин: все происходит хорошо но я хотел бы понять покрытие кода Тестами
Михаил Непряхин: значит это делается с помощью флажка кавер и Сейчас Сюда зайдем
Михаил Непряхин: так три
Михаил Непряхин: час
Михаил Непряхин: Ммм
Михаил Непряхин: Сейчас выйдем на уровень выше или если просто здесь Коварч сто процентов
Михаил Непряхин: ну короче говоря надо какой-нибудь тест если, убрать Новость контексткись уберем
Михаил Непряхин: У меня тут, Сто процентов покрытия вот на наличие букв. Например,
Михаил Непряхин: Вот значит витя. Кавердж Пишет Восемьдесят восемь и Девять процентов
Михаил Непряхин: То есть ключе Не Сто процентов покрытие Тестами
Михаил Непряхин: Но что Именно Не покрыто как Это узнать
Михаил Непряхин: для Этого вот Есть встроенный функционал прямо, с ювайчиком
Михаил Непряхин: значит Мы делаем гоу тест, указываем файл в который запишется профиль и дальше этот файл Мы открываем с помощью инструмента голту кавер
Михаил Непряхин: и Передаем в него чти Амель Вот этот самый файм который на предыдущем шаге. Мы с генерируем
Михаил Непряхин: так Давайте сделаем это
Михаил Непряхин: вот мы с генерируем каграут вот у нас появился файл, кавер это текст вы файл,
Михаил Непряхин: ну По сути вот его даже Можно распасть и как бы ну как-то Еще использовать короче Он просто подсвечивает Кот
Михаил Непряхин: там будет Кот подсвечиваться красным Зеленым Если протестили Зеленые Мы потастили красным
Михаил Непряхин: вот Им можем теперь открыть его с помощью инструмента голод у Камер
Михаил Непряхин: тут Есть косяк Что высель а не открывает нормально сермак
Михаил Непряхин: вернее вот этот файл он Должен был открыться сразу по дефолту но россель его не открывает не Знаю какой-то косяк именно видимо у меня в Консоли Поэтому ну. Это элемен файл давайте его просто откроем
Михаил Непряхин: так право взрослело
Михаил Непряхин: ад двадцать шестого Найду
Михаил Непряхин: так мне надо в темпе перейти линкса лингса бунт у тнп а так что он казер вот он
Михаил Непряхин: вот вообще по идее оно должно автоматически открываться ну в Лингсе У Меня Автоматически открывается
Михаил Непряхин: вот и короче говоря Мы Видим что вот Серым Это Кот который Не вызывался
Михаил Непряхин: Зеленым Это Кот который вызывался то Есть вот мы тестируем функцию валидей
Михаил Непряхин: и мы Видим Что, вот эта часть она Не была протестирована
Михаил Непряхин: ну потому Что, Я Там сам убрал тест кейс
Михаил Непряхин: и Таким Образом Мы понимаем да это Восемьдесят восемь и девять процентов. Покрытия Тестами Но не полностью
Михаил Непряхин: и вот соответственно мы можем взять брать комментарии гедом с этих строк то есть что то что
Михаил Непряхин: и наличие букв я тоже проверяю в тест Кейси вот и Сейчас заново сгенерить
Михаил Непряхин: Сперва файл каграут и Теперь Уже Сто процентов. И Теперь заново Сделать глуту
Михаил Непряхин: Теперь тут Уже другая временная папка кэтом Восемьдесят
Михаил Непряхин: вот и теперь увидеть что оно на самом деле вот эта часть уже вызывалась
Михаил Непряхин: и соответственно таким образом можно добиваться если вдруг вас кошмарят за то что Вы и какой Кот непокрытый тестами
Михаил Непряхин: а и в Принципе удобно то есть Это прямо, прикольно подсвечиваться
Михаил Непряхин: и когда высокое покровительство Просят я активно использую
Михаил Непряхин: так часто ли пишут тесты и чаще видится интеграционное ну
Михаил Непряхин: все зависит от команды от проекта
Михаил Непряхин: Понятно что программисты тяготеют к тому чтобы тесты Не писать но и
Михаил Непряхин: пишут чаще чем интеграционные потому что интеграционные сложные
Михаил Непряхин: интеграционный видите тут надо как бы опыт, Иметь, с ними нот и
Михаил Непряхин: сервера то вы и потом скорее всего интеграционный тест Так легко написать не сможете либо вообще не сможете вот а юни тесты встречаются чаще и в основном тестируется Э свой доменный свой то что в Доменах ко домие
Михаил Непряхин: оно сети не требует Поэтому без Проблем, тестируется
Михаил Непряхин: а ну? Вот как здесь У меня профиль тестируя цена то есть вот что, здесь я тестирую, создаю Новый профиль и вот проверяю что она соответствует тому что я сюда передал
Михаил Непряхин: а и также Ошибочный кейс я передаю инвалидные, данные
Михаил Непряхин: и тоже Жду Что у меня будут ошибки Я не проверяю конкретную ошибку проверяю Что просто Эти данные не Проходят
Михаил Непряхин: Что тут имя не передано тут и
Михаил Непряхин: Маленькая. Ну какие-то в тестах тестируются ограниченные случаи допустим если у Меня там сто двадцать указан. Максимальный возраст Вот я проверяю что То сто Двадцать проходит а су Двадцать один уже нет если в восемнадцать у меня возраст указан я проверяю что восемнадцать проходит а семнадцать уже нет
Михаил Непряхин: вот ну и Так далее, тут невалидный телефон
Михаил Непряхин: короче говоря желательно писать тесты на влидацию вот если, есть у вас метод реалитации какие то ну у Меня тут просто видение Встроен вот сюда прямо Поэтому я и тестирую сразу на создание всего Профиля если бы у Меня анимичные были модели
Михаил Непряхин: небогатая то я бы просто тестируем отдельные методы влидации и и
Михаил Непряхин: опционально если Просят покрытия высокой тестами то можно. Еще с помощью моков.
Михаил Непряхин: Тестировать из кейсы Сейчас. Мы Как Раз, про это поговорим
Михаил Непряхин: Поэтому да отвечая на ваш, вопрос
Михаил Непряхин: Домен в доминие чаще всего можно Увидеть юни тесты в бьюськейсах в бизнес логике реже можно увидеть Юни тесты потому. Что требуют смоки
Михаил Непряхин: а сами интеграционные тесты явление более редкое ну я для себя Всегда, пишу
Михаил Непряхин: если, есть возможность если, я как бы сам писал сервис то я Всегда, пишу если, не я писал сервис то обычно там такой возможности, нет потому что написано как-то криво и не получается интеграционный тест написать
Михаил Непряхин: вот но если я сам себя спешу я интеграционную астадию и
Михаил Непряхин: сплю спокойно то есть я это делаю исключительно для спокойного сна
Михаил Непряхин: как структурировать тени тесты когда много моков ну вот Сейчас посмотрим смоками пример как структурировать антон тесты ну интеграционные тесты Еще Иногда называют функциональными иногда их интуитами тестами называют но вообще интернет-тесты это все таки имеется в виду когда вы
Михаил Непряхин: запустили уже в кубернетисе на встрече среде и
Михаил Непряхин: мы не можем все проверить мы проверяем только наш сервис и от ближайшей зависимости самая Главная базу
Михаил Непряхин: в индеграционном тести а Интуиция Подразумевается что это мы вот прямо,
Михаил Непряхин: дернули Ручку на нашем Гейтве Эпе и полностью по всем. Сервисам запрос прошел и все успешно ну. И также Там Протестировали разные ошибки как отдаются
Михаил Непряхин: и и ну вот то же самое как вот я здесь показывал
Михаил Непряхин: так как тестировать отправку в кафка ну здесь сложнее с Кафкой сложнее
Михаил Непряхин: ну как поднимаем в доктор, композе, добавляем дурьком по сказку
Михаил Непряхин: и когда кафку Пройдем здесь нельзя покажу как тестировать кафку
Михаил Непряхин: вот ну ну как ты стерж ну если, Мы консимер
Михаил Непряхин: тестируем соответственно надо туда Запихнуть сообщение ну соответственно мы сами
Михаил Непряхин: вот Допустим когда мы тестируем по тестируемому Доставание профайла что мы делаем Мы сперва Этот профиль Создаем Но логично если Мы его Не Создаем Не создадим Мы его Достать Не Сможем Поэтому Мы распрострадали а Потом достали и проверили Что Там Лежит То Что нам нужно
Михаил Непряхин: а если бы Мы тестировали Кафку Вот у нас допустим консюмер был бы значит Мы бы сперва за продюсерами
Михаил Непряхин: десять. Сообщений а потом закосюмели эти десять, Сообщений и проверили что они приходят и Там все отрабатывают логика отрабатывает без ошибок
Михаил Непряхин: если Мы тестируем и
Михаил Непряхин: продюсер когда Мы хотим? Убедиться что нас приходят ну что Мы создаем сообщения то тогда Мы Сперва создаем ну вызываем там нашу логику там
Михаил Непряхин: отправляются в кафку сообщения а потом где-то здесь Мы запускаем консюмер
Михаил Непряхин: на этом Топике и проверяем что сообщения приходят ставка немножко Сложнее Потому Что кафка имеет Лаг временной и дот
Михаил Непряхин: та которая о здесь спали вот сказка немножко Помедленнее Но вот Похожем стиля
Михаил Непряхин: Поэтому Кафка Без Проблем тестироваться. Все нормально
Михаил Непряхин: Таки Промоки Но поговорим Про Моки
Михаил Непряхин: значит Вот Мы вообще что такое Муки Моки это а альтернативная реализация интерфейсов заглушек То Есть вот ээ мы
Михаил Непряхин: когда у, нас есть интерфейс погри Ммм
Михаил Непряхин: мы Же имеем полиморфизм да То, Есть вот Мы можем в зависимости
Михаил Непряхин: От того какой Мы сюда передали Реализацию этого интерфейса а Вызывать либо, реальную базу, либо, замоканные У Аиковую Функцию
Михаил Непряхин: которая будет вести себя как будто
Михаил Непряхин: там база есть а база на самом деле нет так вот библиотека мокари
Михаил Непряхин: она построена вокруг библиотеки ты стефай
Михаил Непряхин: значит ну вот который Мы только смотрели который два
Михаил Непряхин: аа Под Модуля Реквиай, и сержан лились смоки мокинг,
Михаил Непряхин: и ему здесь рассказывают Что вы можете создать, замоканный объект который будет делать вы сам в ней
Михаил Непряхин: короче бабла мы на самом деле эту
Михаил Непряхин: часть пропускаем потому, что за нас это делает библиотека мокари тоже также похожим образом голениейт ну конечно мокрые надо Сперва установить Поэтому в мейк файли есть мокрые инстал вот здесь
Михаил Непряхин: тоже запускаете устанавливается, в Голбин Папку
Михаил Непряхин: и Дальше когда вы делаете гол генерал ну вот Мы его уже делали
Михаил Непряхин: ну мейк гены делали значит создаются моки помещаются в эту папку
Михаил Непряхин: что бы они сюда помещались у мог ли есть свой конфигурационный файл, ну Сейчас модно круче у всех Кот генераторов Сейчас Есть конфигурационный файлперт
Михаил Непряхин: и там очень-очень много разных настроек был смысл в том что вот можно тут, вот о не знаю не помню Что такое дир ну от какой директории Будет находиться вот эта вот папка с моками Что она Будет находиться
Михаил Непряхин: в той папке где Находится интерфейс а Там все равно Идея в том Что Мы только Интерфейсы можем замокать ну потому Что иначе, полиморфизма Не Будет и ничего не сработает
Михаил Непряхин: Поэтому еще как бы если Вы Хотите, тестирования сделать ну Мы здесь интрофией используем не только для тестирования
Михаил Непряхин: а в первую очередь. Для того чтобы разграничить ну сделать архитектуру чистой сделать границу между нашими адаптами и нашими эскизами
Михаил Непряхин: но бонус дополнительный что у нас становятся из кейсы легко, тестируемые потому Что легко, заменяются интерфейсы моками
Михаил Непряхин: и соответственно вот Там где находятся интерфейсы Мы помещаем папку мокс
Михаил Непряхин: как называться бутфаер умок с Голову.
Михаил Непряхин: Форс файрайт ну типа Это что Мы Перезаписывать будем файл. Форматор для импортов
Михаил Непряхин: а тут надо сделать ира Кстати
Михаил Непряхин: ну а кто Там выводит Сша, мэйк генералку дуон ани час
Михаил Непряхин: вот Сейчас ничего не выводит вот чтоб не уводила
Михаил Непряхин: а брек Эшнеем Это что вот пэкадж вот этот он Будет называться мокс
Михаил Непряхин: вите тоже тут, же самое Колд генерале идба и мокрый Дунод и диет оздоровл, стандарт
Михаил Непряхин: рекусивная отключена рекусия тимплэйт что будет использоваться стефа но видимо в мокре Сейчас же можно не только Этой стефа использовать а другие библиотеки но это стефа и самая популярная библиотека для цитирования
Михаил Непряхин: абстрактныем это как будут называться что по имени интерфейсов
Михаил Непряхин: да что вот наши генеральные структуры они будут называться по имени интерфейсов разный трафис называется подвиг значит структура тоже Будет называться подвигом фейковы
Михаил Непряхин: и какой пакет мы хотим, в каком пакете мы хотим, генерить
Михаил Непряхин: Что вот мы хотим, в нью-йоркесе генерить а оутру Не знаю
Михаил Непряхин: Что видимо для всего будет использоваться. Конфликт Что ли
Михаил Непряхин: так вот смотрим что тут накинерилось
Михаил Непряхин: ну для рэдиса сгенериался ну для ради Саванного теза посмотрим для этого
Михаил Непряхин: для Пазгри вот значит сгенерировал. С нее Позгрыз здесь какие то интерфейс смоки возвращают объект возгрыз ну прямо, Скажем
Михаил Непряхин: не то что сильно читаемое здесь че то находится ну вот например, клеет профайл. Вот мы будем вот это вот клевет профайл это альтернативная реализация нашего фейкового метода который не будет Ходить реально в базу, он просто будет делать вид что он туда сходил
Михаил Непряхин: и отдавать нужный нам Результат
Михаил Непряхин: То есть вот здесь какая То Там магия чего То он Там делает какие То вызовы и просто прикол в Том Что Мы когда имеем дело с моками Мы можем настроить Поведение.
Михаил Непряхин: То есть как бы основна Идея что Мы можем Управлять поведением Ну, и логично Мы Бы просто сами Могли вот Это вот фейковое все описать
Михаил Непряхин: и и
Михаил Непряхин: Допустим в каких-то Случаях отдавать ошибку в каких-то Случаях Не отдавать Если все Окей ошибку Не отдавать Если чего-то проблему ошибку отдавать Или Допустим клеет профараю То же самое
Михаил Непряхин: Видите он здесь Делать тоже какую То Работу Еще креит?
Михаил Непряхин: Ну короче здесь Кот Не То чтобы сильно читаемый Давайте Посмотрим как этим пользоваться.
Михаил Непряхин: Значит есть у нас метод крейсерфайла станзак семидесяти диван
Михаил Непряхин: значит у нас здесь есть зависимости на
Михаил Непряхин: с базой данных да вот-вот нас интересуют два вот этих вот Метода
Михаил Непряхин: Мы Э не имеем других зависимостей здесь кроме вот баз данных
Михаил Непряхин: Поэтому вот эти вот методы Мы хотим, замокать то есть Мы хотим, сделать Их Фейковыми чтобы
Михаил Непряхин: как бы юный тест подразумевается что он не ходит по Сети если тест ходит по сети это уже не юный тест это уже интеграционный тост
Михаил Непряхин: а юни-тесты они супербыстрые они по сети никуда не ходят они просто проверяют какой-то Базовый функционал ну самый большой Профит конечно в доменной Области. К нам наблюдательно проверяем но вот из кейсов в теоретической террористике. Тоже можно
Михаил Непряхин: проверить с помощью замоканного поведения значит Что Мы Хотим, чтобы вот э, здесь отдался ниу то есть как Будто Мы сходили в базу и этот профиль сохранили андрюсен нил
Михаил Непряхин: и здесь Тоже как Будто Мы сохранили эти Проперти и Отдался нил
Михаил Непряхин: Если Мы хотим, Назначить им такое Поведение смотрим как пишется тест Ммм
Михаил Непряхин: ну во Первых здесь у меня есть ну то. Точно так же начинается с теста я тут название делаю видя что этот эксцесс ну как минимум с эксцесс надо Делать у меня тут еще Только одиннадцать со свете ошибочного. Даже нету
Михаил Непряхин: а первым делом я отключаю окна в телемметры видите вот я делаю вот этот рожок саймон мод и глушу
Михаил Непряхин: огонь телеметры и шоу у меня есть транзакция
Михаил Непряхин: и чтобы из транзакций Не было ошибки потому Что я когда буду Вызывать вот этот вот враг То
Михаил Непряхин: Там внутри вот я Дойду что это из юни тест и просто сразу верну функцию ничего не делаю
Михаил Непряхин: здесь я сайт модом замокиваю а это я просто не выполняю никакую эту логику потому что я начну выполнять ошибка упадет ну потому что нет уже базы никакой Поэтому вот мне и нужен вот этот вот из юни тест для того чтобы сделать юни тест
Михаил Непряхин: вот все значит эээ
Михаил Непряхин: а говорим что этот рум все станции Тоже теперь ошибок не будет дальше настраиваем поведение Пос грим ну делается это вот ну
Михаил Непряхин: через нью это я на чад же пи мне писал ну Там чернилью Так люди Не пишут вот и
Михаил Непряхин: и ну Там в норме это
Михаил Непряхин: а Создается Измоканного вот этого пакета Экземпляр По Грим дальше
Михаил Непряхин: с Помощью он мы говорим типа вот настраиваем поведение
Михаил Непряхин: что мы хотим, для функций Клеить профайл
Михаил Непряхин: это аргументы типа какие мы будем передавать туда а функция функция к
Михаил Непряхин: профайл получает два аргумента на вход
Михаил Непряхин: а вот клет профайл контекст и профайл до аргумента
Михаил Непряхин: и крит Паперти Тоже два аргумента принимают
Михаил Непряхин: вот я здесь говорю что это любые аргументы типа меня Сейчас не интересует
Михаил Непряхин: а тут, можно Настроить что вот допустим конкретно вот такой то если это аргумент то Поведение будет такое-то а я настраиваю неважно какой я Сюда аргумент Передаю эни ну это мой Собственный леас на мок энифин просто мог винить длинный поэтому я сделал свой короткий или осени
Михаил Непряхин: вот и Говорю что Функция Должна вернуть нил.
Михаил Непряхин: Ну, то Есть просто Она вызывается возвращает к ним как будто. Бы профиль создается то же самое клеит проперти передается два аргумента и возвращается нил,
Михаил Непряхин: Дальше я хочу гарантировать что, а эти Методы Они вызывались то есть Они были вызваны
Михаил Непряхин: и Поэтому вот можно еще дополнительно сделать проверку что, оно было вызвано ну Потому что может быть такое что Мы просто для того Куда не дошли и как бы тогда это же не имеет смысла а здесь мы Проверяем что да мы до этого Куда доходили Кот вызывался
Михаил Непряхин: а дальше когда У нас ну вот поздравил этот эскиз создается видите Мы посгры сюда передаем
Михаил Непряхин: а родиста у Меня Там Нет Поэтому Я его просто ним передаю Я передаю туда внутрь Лозунг, Реализацию которая подходит под вот этот интерфейс
Михаил Непряхин: там реализованы все методы просто я настраиваю поведение только для этих двух методов
Михаил Непряхин: а все что у меня есть из кейс и дальше Выполняет сам кейс значит Сантест ну настраиваю Импут
Михаил Непряхин: да Тывушку, настаивал с именем Сейжем и моего и вызываю юзкейс
Михаил Непряхин: ханул бэкграунд передаю контекст и этот самый импульт ну какой то любой профиль
Михаил Непряхин: и проверяю что ошибки не было и что вот этот айди который здесь вернулся он не пустой
Михаил Непряхин: аа потому Что Там у Меня вернется профайл найди ну Там с генерица
Михаил Непряхин: Там сгенерится этот Там ее Идигги Не Рискались, да вот ее иди здесь Генерита Поэтому у меня здесь у меня здесь вернется о ее иди какой-то
Михаил Непряхин: ну и вот я оно просто как бы работает кудрин заткнул
Михаил Непряхин: вот Юн Короч просто Отрабатывает тоже, так Же как Обычный тест
Михаил Непряхин: ну это сообщение мне что Трейсинг, отключен и таким образом мы можем
Михаил Непряхин: покрыть тестами вот эти наши риски а и
Михаил Непряхин: Например, здесь тоже вот важно понимать да вот мы тоже можем Сейчас сделать проверить покрытие тестами
Михаил Непряхин: и понять какое оно например, Давайте сделаем это
Михаил Непряхин: так у меня Там наверное в майк файли заготовлено это
Михаил Непряхин: а нет-нет я видимо убрал, так шас к огню гу гоу тест
Михаил Непряхин: вот значит все все Пакеты тебя протестирую,
Михаил Непряхин: вот он запустил, все Пакеты ну нас интересует вот Интерна ньюскейс
Михаил Непряхин: вот вискись да Мы видим кавры шестьдесят семь процентов мото вот то что Мы Там покрыли Тестами дальше Запускаем
Михаил Непряхин: а этот болтун готу
Михаил Непряхин: так Сейчас надо сходить в папу четыреста девять
Михаил Непряхин: так вот здесь у нас все файлы соответственно нас интересуют из юскейсов
Михаил Непряхин: интиор на листке и скреет профайл
Михаил Непряхин: вот и видим что семьдесят семь процентов. Покрытия тестами но непокрытые
Михаил Непряхин: вот эти вот то есть сексста вариант он прошел
Михаил Непряхин: но покрытие Не полностью потому что здесь ошибка Не отработана ну то есть чтобы эта ошибка отработала нам надо какие нибудь инвалидные данные сюда передать в детошке вот в Этой вот
Михаил Непряхин: потом здесь вот ведь аа ошибка не проверена что будет здесь ошибка непровергнуть чего будет ну Мы также можем взять и настроить Что вот это наше Поведение
Михаил Непряхин: внуки Что вот оно здесь возвращает какую-нибудь ошибку Там взять из Домина а
Михаил Непряхин: игорь нотфоун например, вот так вот задать
Михаил Непряхин: и соответственно мы будем проверять и эта ошибка уже проверится и покрытие покажите тестами будут больше
Михаил Непряхин: вот Поэтому как бы вот эта функция с Каверджем если, вас прямо, прессуют и требуют вот этого покрытия понятно Что добровольно скорее всего вы Этой фигней не будете заниматься потому Что
Михаил Непряхин: да как бы сказать вот когда у нас есть интеграционные тесты
Михаил Непряхин: ведь это и так там Тестируется мы в интеграционном Тесте убиваем двух зайцев мы проверяем что у нас клиент рабочий мы проверяем на Реально существующей базе мы делаем полностью прогоняем весь наш путь
Михаил Непряхин: а здесь же когда мы делаем это с Помощью моков.
Михаил Непряхин: Мы по сути занимаемся тем что мы для тем леда Или Там прокта Или еще какого-то менеджера выше просто показываем что У нас покрытие Тестами есть
Михаил Непряхин: вот Поэтому я добровольно вот эти вот юни тесты смоками Не пишу потому что считаю что Они бессмысленны потому что я и так пишу интеграционные тесты
Михаил Непряхин: а если интеграционных Тестов Нет проект Не мой То и Не тесты Ну,
Михаил Непряхин: как правило они ничего Не доходят Если Мы в доменной Области когда тесты Пишем тут Мы можем чего-нибудь найти, Действительно какой-нибудь интересный кейс который мы Не продумали То здесь это ну
Михаил Непряхин: по-моему ни разу Не Было У меня, чтобы Я чего нибудь с Помощью Такого теста находил оно Только доставляет тем неприятностей потому что Тяжело что то описать они легко ломаются
Михаил Непряхин: плюс вот эти вот вещи они тут, видите на а в пустых интерфейсах
Михаил Непряхин: и вот аргументы и пустые интерфейсы и соответственно Она очень Хрупкая, и Тяжело дыбается
Михаил Непряхин: ну то, же самое вот я написал тест на агент профайл гет профайл
Михаил Непряхин: ну тут вот функция гетто профайл и
Михаил Непряхин: а ну вот видите здесь у меня есть эксцесс вариант я настраиваю что гет профайл принимает
Михаил Непряхин: э не ну здесь от контекст первым аргументом а вторым адишник а Эдичный правом витя со слезы генериру
Михаил Непряхин: я говорю что возвращается профиль что. Возвращается профиль с этим самым айди ты все заранее подготовил к Врачу перемены
Михаил Непряхин: поведение настроил проверил потому Что в конце Что был вызван
Михаил Непряхин: если Не был вызван то ошибка Бот
Михаил Непряхин: и собираю мюс кейс Так создаю инпут из двиаутпут и соответственно вот потом а экшена тот который и
Михаил Непряхин: вот и видите здесь мне шесть негативные тоскейсы
Михаил Непряхин: а когда я адишник какой то инвалидный прогоняю и получаю ошибку и нот фаунд
Михаил Непряхин: короче говоря здесь У меня. Похоже покрытие в гетто профайле больше будет но ведь Посмотрим сколько он говорит про файли покрытия
Михаил Непряхин: а мете сотка сто процентов вот то Есть гм
Михаил Непряхин: Я как бы вот этими вот тестами добился того конечно Что, Я вот Ведь Ошибку здесь Возвращаю настраиваю Поведение
Михаил Непряхин: Я конечно добился покрытия сто процентов тестами Но Ведь во Первых сколько это много года его еще надо написать
Михаил Непряхин: и Сейчас же пяти, Плохо пишут такие тесты потому что тут много нюансов
Михаил Непряхин: и Поэтому при наличии интеграционных тестов и это все Не имеет смысла Потому что это занимает Время и
Михаил Непряхин: Ну как прямо такое немножечко Бессмысленное вад
Михаил Непряхин: Поэтому Знать важно но работы смоками надо уметь и но преимущественно лучше писать интеграционные тесты
Михаил Непряхин: Поэтому если вы еще их не смотрели не разбирались вот поразбираетесь именно как они здесь Написаны они кстати и Написаны более по человечески здесь Нет всякой этой фигни с настройками моков впрочем
Михаил Непряхин: то Есть здесь оно Как то все проще ну Понятно что. Если. У нас была бы зависимость сторонний какой то Сервис у нас видят в зависимости
Михаил Непряхин: особо нет у нас Там только поздря. Внутри вот если бы Мы зависели от какого-нибудь другого сервиса конечно нам. На Него Пришлось бы написать Мок
Михаил Непряхин: ну тоже для этого Есть различные библиотеки ну я обычно предпочитаю просто руками написать сервак который будет. Амулировать Работу вот этого другого сервиса как Будто Мы в Него сходили и он Там ответил. Каким-то ответом которым нам. Нужно
Михаил Непряхин: так вот ну вроде вроде протесты теперь, все
Михаил Непряхин: так и в реальной базе данных нужно ли проверять каждый Раз
Михаил Непряхин: то с генерированным в юриди для создания Нового пользователя не существует Бд
Михаил Непряхин: или забиваем на это потому Что. Вероятность того Что с генерацией два Одинаковых везде слишком мало
Михаил Непряхин: Ну, вопрос интересный Я запарился Этим вопросом и Я Создавал
Михаил Непряхин: ритрай типа если У нас короче Я видел, все варианты подходов значит первый вариант Подхода это когда мы ее иди создаем с помощью Модуля в погребе Позгрелись модуль
Михаил Непряхин: для Создания для генерации. Ее иди и он соответственно если вдруг генерит ее иди Не тот который надо то он сам его перегенерит но это если вывод создаете ее Иди при создании Там строки
Михаил Непряхин: аа значит есть вариант когда Мы сами. Его генерируем и пытаемся записать а вдруг там Он уже есть
Михаил Непряхин: я писал для этого случая рит рай но Он Меня ни. Разу не зарабатывал
Михаил Непряхин: то есть типа если вдруг у Меня ошибка При записи то я перегенерирую. Новый то Есть я сделаю такое Что вероятность реально очень мала что с генерата два Одинаковых ее идей она не наливаю но она есть конечно но она очень мала
Михаил Непряхин: и если вдруг Вы начнете с Этим сталкиваться Вы увидите это в логах если это Вдруг станет проблемой
Михаил Непряхин: и тогда. Сделайте вот эту вот перегенерацию но проще по мне так. На стороне клиента просто сделать еще один запрос если. Этот ошибочный просто возвращать Ошибку какую-то Пусть Пусть лучше клиент сделает этот Рай
Михаил Непряхин: а Мы тут замокали метод адаптатора клеет профайл элементы риски Клетку во мнении Мы мокали только адаптации клят профайл доконаторы то Есть как бы моки и Это Всегда продавторы Мы мокаем
Михаил Непряхин: а вот этих товарищей
Михаил Непряхин: то есть а завтра же у нас сеть да то Есть как бы почему Мы Доменная не мог им потому что Не сеть
Михаил Непряхин: почему Мы Разделяем адаптаторы на два вида на адаптер и на доменные какие-то функции и Там структуры модели потому что вот редактор это сеть домены это Не сеть Поэтому домены и
Михаил Непряхин: Э смысла доменной функции доменные методы Нет смысла мокать Потому Что Они Так Не сетевые
Михаил Непряхин: Мы мог и Делаем только для того чтобы По сети не Ходить чтобы компост не Поднимает чтобы Там ничего не подрубать никакую сеть
Михаил Непряхин: и в этом и слабая сторона юнитестов смоками потому, что а что черт побери тогда мы тестируем
Михаил Непряхин: мы тестируем вот
Михаил Непряхин: вот эту вот вот он что тут тестировать какую логику тут ее как бы особо и нечего тестировать согласен иногда тут бывает есть что, тестировать какие-то циклы, какие-то ифы Возможно, в этом случае да если Нет интеграционных тестов То можно и смог ими написать
Михаил Непряхин: вот ну вот прямо на каждый чих на каждый из кейс
Михаил Непряхин: Ну. Вот опять. Же как бы если. Они прямые простые как веревка и палка ведь, Наш юрист кейс и тут смысл на них писать вот эти вот юни тесты
Михаил Непряхин: Поэтому Там мокаются только авторы
Михаил Непряхин: а как мог чужие Сервис ну точно так же как бы Мы работали с чужим сервисом значит смотрите был бы у нас какой нибудь Сервис авторизации ау в какой нибудь Сервис ааа
Михаил Непряхин: Сервис будут называться Аулф а Мы с ним будем, работать. Через интерфейс правильно
Михаил Непряхин: соответственно у Него Будет Какой то интерфейс а вот подсказали пар стокин
Михаил Непряхин: давай еще чего-нибудь вали да Токем давай выледеет вот
Михаил Непряхин: вот Так Мы будем, с Ним работать.
Михаил Непряхин: А значит Когда мы с генерим запустим нашу мейк а генерал им
Михаил Непряхин: все Мы с генерией для нашего, аулза и тут появился
Михаил Непряхин: вот он аут сервис Наш аус, короче моки для Него вот просторкин, появился
Михаил Непряхин: Вот соответственно мы теперь можем задать. Поведение этому.
Михаил Непряхин: М сервису
Михаил Непряхин: такое как мы хотим, когда то здесь ошибку мы хотим, вернуть когда то мы хотим, Нимку отвернуть ну и поняли то Есть короче говоря если, У нас Будет чужой сервис то Мы чужой сервисом тоже Будет в виде интерфейса
Михаил Непряхин: вот а если Мы это делаем через интеграционный тест то вот здесь уже
Михаил Непряхин: и Мы Там в интеграционных тестах Так мокать не можем и поэтому Тут Появляются сложности Тут получается. Что
Михаил Непряхин: Мы поднимаем наш сервачок маленький для этого аук сервиса и Там повторяем его Ручки
Михаил Непряхин: и когда мы будем из нашего и
Михаил Непряхин: но для этого тоже есть какие-то библиотеки которые позволяют писать вот эти вот моки уже сетевые муки
Михаил Непряхин: а просто Посоветовать вам особо чего-то хорошего Не могу потому Что все они Дурацкие я вообще Предпочитаю Писать сетевые Вот Эти Моки. Сам
Михаил Непряхин: Вот угу
Михаил Непряхин: так все вопросов больше Нет все Же понятно, с муками с тестами
Михаил Непряхин: Окей ладно
Михаил Непряхин: а хорошо ну как бы подытожить можно так Что тесты конечно писать хорошо ну самое главное Пишите тесты
Михаил Непряхин: современном слое в доменом свой не так много чего есть тестировать То Это Обычно какие То функции валидации
Михаил Непряхин: и что-то подобное
Михаил Непряхин: статусы тоже можно затестировать но глупо конечно что то тестировать ну к Теории можно и на них тесты написать и как бы если вы пишете на доменные слои и тесты июни тесты это уже хорошо
Михаил Непряхин: второй шаг это писать интеграционные тесты
Михаил Непряхин: а и Третий ну не обязательный это вот уже смоками писать тесты на визкейцы ну это только если, просят добровольно я бы не советую вам писать потому, Что это
Михаил Непряхин: в них приходится вязнуть видите Сколько строк кода
Михаил Непряхин: ну если за вас тосет шаджа петина Пишет может мне он сразу разовьется вот это будет неплохо писать тогда тогда может быть можно их писать Ну как бы в любом случае вы себе, оставляете возможность Всегда это легко сделать когда вы Используете интерфейсы для адаптеров если бы вы использовали адапры напрямую То такую возможность У вас бы Не было
Михаил Непряхин: так ну анна Ну Все Тогда давайте до? Следующего Вторника Всем пока.