Здравствуйте дорогие слушатели, в эфире RadioDotNet выпуска номер 95. Сегодня с вами как всегда и его постоянные вдущие Анатолий Колаков. И РУА, мутин всем привет. А также бравая команда помогаторов, среди которых наши хорошие друзья. На Александр Сергей Владислав Шевченко Антон Лазеревалья Гури Самарин, Виктор Руслан Дафтамонов, Александр Еригин, Сергей Безенка, Александр Лапердин, Ольга Боддаренко, Дмитрий Сорокин, Сергей Краснов, Константин Ушаков, Андрей Фозлеев и Пальсим от Джевохири.
Друзья, всем спасибо, кто нас помогает, а кто не помогает, задумайтесь, может уже пора стоит начать. Ну, опять же, если нет возможности помочь, подкастутовую всегда можете нас посмотреть и рассказать друзьями, расшарить. И всячески по-другому увидеть нашу аудиторию, мы как раз перед выпуском смотрели статистику. Как-то слабо растет аудитория. Давайте там в социальной сети используйте. Чего там еще уметь? Разбрасывайте всем наш подкаст, срочно, на дарости.
А для тех, кто хочет посмотреть, как и в нас статистика, подписывайтесь, заходите в наш приватный чадек. И там мы по-саме о всем поделимся. Так, замануха закончилась, можно пристывать к новостям. Да, новостей у нас немножко есть, Microsoft что-то внезапно разородился и не только выпустил дод над 9, привью 4, пару тройку недель назад, перед в записью прошлоу выпуска, но и выпустил дод на 9, привью 5, перед записью этого выпуска. И поэтому давай разберемся.
Сожжини за 2-3, неделю спристили сделать. Да, удивительно, то как бы месяцами ничего не от этого начинает как-то хлебать. Ну у них там может кипят, а на количество привью дредилиза, теперь надо быстренько быстренько уместить. Ну или знаешь, как всегда там полгода планирует, там черт, ад квадратики рисуют, а потом последний, наверное, перед дредилизем за 2 месяца все делают. Может быть, да.
Ну там не знаю, бронки долго мариновались, теперь все обмежали, ну давай я это за релизим, давай, чем не за релизим. Ну, давайте, мы тут вполне, вполне. Давай, давай, рассказывай. Вас смотрим, вот этот раз почему-то нет секции рантайм. В рантайме видим либо ничего не происходит, либо ничего релизит. И секция, хоть и на Н2, а яберс и НДРН, там только про библиотеки.
Ну и начинается все конечно же с AI про то, что добавили тензор приметивs и тип тензор t. По-моему, мы про это уже рассказывали и вроде бы его уже добавляли, и на самом деле он существовал уже в дутной твосем, но добавили немножко всяких разных методов типов и так далее, и как они пишут
с 40 верлодов в дутной твосем, теперь там по 5-2 верлодов, то есть это все методы, которые позволяют работать над спанами, всякие математические операции быстрые проворачивать, потому что это все суперсим адаптемизировано, то есть векторная рифметика, вот это все, и понятно, что главным потребителем этого добраивляется искусственный интеллект, точнее, ну любое программирование вокруг него. А для чего это по фалк тут там?
Вам это может потребуется в вашем кое-то, ну, надо посмотреть на квестные юскейзы. Скрейс, если вы работаете как-нибудь тяжелым тематикой, ну, может быть, полезно. Все это живет в Пеке под названием System No.Xtendsers, ну и смотрите в него в класс тензор примитивс, как конкретно вокруг этой новости.
Дальше мы уже рассказывали, что сежарми показали ключевое слово params, в котором теперь можно не только предавать массивно и любую коллекцию там типа ли думали спан или еще что-нибудь в таком духе, даже интерфейсы, вот теперь в этом preview это все официально въехал уже
в репоситоре и как они пишут в.9 теперь порядка 60 методов, у которых уже используется парамсредолон-лиспан, в частности например это с какой-нибудь стринд-жойн и как Толли говорил в прошлом выпуске магическим образом перекомпилировав просто перекомпилировав вашу программу под новой.9 вы получите бесплатные бусты производительности, ну потому что вот оно теперь так работает, удобно и быстро.
Все рочуяльюс, это конструкция которая позволяет искать подстакьи в строке в 8 дотнете она появилась и она интересна тем что она не просто ищет, она знает поскольку она знает какие конструкции надо искать, какие подстроки, то она может выбрать оптимальную алгоритм за 70 длины, строк задержание строк, ну и очень таком духе.
В 9 дотнете теперь появилась возможность искать в более большой строке, ну и средесно ехали как подстрок одновременно там такая кухня, в общем если все рочуяльюска конструкции вам интересно, посмотрите там прям конкретные примеры, я так между тем, что довольно нише вы изменения, но почему-то они удовольны сильно пьяк. А вот следующий метод может действительно будет полезен,
называется он таск.wennich у нас есть вennany у нас есть вennall, они соответственно комплитятся, они возвращают таск, который комплитится соответственно вennany, когда хотя бы один из тасков, который вы передали туда за комплитился, вennall, соответственно когда все таски за комплитились.
Вennich возвращает не таск, вennich возвращает ая синг номер был, что позволяет его запихнуть в осьинг forage или он evade forage, я не знаю как его называть правиль, и по сути это позволяет вам сделать следующую конструкцию, вы создаете пачку тасков, запускайте их на исполнение, а дальше пишите wait forage, там не знаю ваш там t, в таск.wennich и передает домосив тасков, и соответственно этот цикл будет выполняться для каждого завершающегося таска, в том порядке, в котором они завершатся.
Очень недо конструкция. Да, кстати очень часто ситуация была, когда у тебя есть какая-то пачка тасков, и ты хочешь просто обоработать первый, который завершился, ну как бы такая банальная задача, в интернете было очень много ее решений, но естественно не простых, а там честно какие-то кастыли, и очереди там какие-нибудь ожидания, кастомные, концелышные токены, ну в общем не то чтобы совсем сложно, но казалось для такого примитивной вещи, должно быть какой-то примитивное решение.
Нет, но потому что первый это для первый завершающий шевфь, ты просто берешь вenni, нет? Когда любой завершился, тебя как бы ее, он первый, а вот если тебе нужно все, то ты делал в цикле, ты говорил вenni, тебе завершался какой-то один, ты говорил хорошо, и обрабатывал его результат, порал массив или там список на единичку меньшего размера, без этого завершился, говорил с нового вenni и снова ждал, так в цикле ждал аккуратненько пока не все не закончится.
Ну да, я имел виду, что первого завершился и надо перебрать все. Ну да, когда в первом случае, тебе приходилось вот такой список или руками поддерживать, или каким-то другим способом вычислять, кто уже завершился, кто еще не завершился, это неудобно. Так что вполне бы давая нормальная конструкция, очень часто использовались на практике. Ну, терпывилось. Хорошо, что ездим.
Да, значит у нас в тот момент тоже относительно давно есть понятий channel, мы как-то помпы о них рассказывали отдельно, тут что-то недавно, и они бывают там bounded onbounded, и если он былbounded, то его можно было создать про аэротайст, теперь, короче, есть приортизированный onbounded channel, то есть channel, которая ограничит много размеровым оперативной памяти, при этом с поддержкой переритета.
Понятно, что элементы, которые вы туда запихиваете, должны иметь там туда нужно передать точникам парер, которые умеют сравнить такие элементы, чтобы было понятно, что только или-то с ней приоритеты, да, они сами элементы. Но тем не менее, если вам нужен channel, для передачи данных и задавания став другой, и при этом вам нужен он приоритет, а мне как-то, как хочется приоритетами, вот теперь там это и есть.
9 тут на эти, при 5. Так, Open Telemetry кусочек чуть-чуть под крутили, чтобы больше соответствовать спеки. Я, честно говоря, не знала такой фичи, как линки. То есть, it turns out, в Open Telemetry есть линки. Ты когда создаешь какой-то активите, ты можешь сказать, что он с линковым с каким-то другим активите, причем это может быть совершенно другой спан вообще, ну, просто любой указываешь, он будет с линковым, прям линк. Вот, вот теперь это штука поддерживается нормальным.
Вот вот эти, я никогда не пользовался, честно говоря, я только в штатном, кто там паренд, чайл, да, Павловича, отношениям пользовался. Ну, это и ситуация довольно редко, то есть, когда тебе нужно за одного спана, соцсотлаться на другую, я даже на практике такой общей случае не могу вспомнить. У меня есть редкие случаи, когда там нужно просто поставить ссылочку для того, что в визуальном егерь, допустим, перейти куда-то.
А вот, как у меня быть частным, ну, не знаю, пример, пример пока не приходит в голову. Ну, у меня единственный пример, который приходит в голову, это если тебе действительно, не знаю, там, из одной операции ты рождаешь пачку других, но не хочешь их делать, именно честно, до черними, да, с панами. А вот хочешь, как бы... А где ты хочешь делать? Ну, не знаю, не знаю. Вот зачем-то. Почему, стыки. Да, да, это все равно неконкретный пример, если ты зачем-то этого хочешь.
Да, не знаю, как тебе надо за чем-то. То есть я понимаю, зачем это может быть, мне полезно, что типа вот ты кликнул на ссылочку, да, и перешел в этот до черный, но почему не сделать его исходно до черный, я не знаю. Ну, в общем, если у меня... У меня больше кажется другого, знаешь, вот когда ты делаешь, например, что у тебя как-нибудь документ оплачивается, там как-нибудь корзину у тебя чекаутится, то ты вполне можешь дать ссылку на спан, который положил
там элемент в эту корзину для того, чтобы человек, который дебажит там, как они службы поддержки, быстрее нашла, пользователь вообще, когда клал этот элемент, и кскок он допустим в тот момент стоил, чтобы он перешел на вообще другой спан, который никак не относится к этому в руководке. А оно типа сленковать друг с другом разной операции элогически, ну да, наверное. Ну, очень если вдруг пользователь с таким, расскажите, кейсы в комментах где-нибудь, будет интересно узнать.
Дальше, Type-Discreptor-Treaming Support. Что-то такая, позволяет теперь вызвать метод на Type-Discreptor есть метод, Register Type, generic.
Типа Т, который позволяет указать, что вот в этой Register Type, использует этот Type, и в таком случае, этот метод Register Type, единственный для чего он служит, он не делает ничего внутри, единственный что он делает, он помечен правильным атрибутом типа как там правильный это для треминга, называя цепра, что не надо, в общем, выкидывать используемый тип, и за счет этого, собственно, Треммеру говорится, что вот этот тип, на самом деле, используется.
То есть такой способ указать с Треммеру, что этот тип используется через Register Type. Дальше, а вот следующая штука может потенциально интересная, но, наверное, тоже довольно узкий и скейс, на тебе не менее, это, называть Type-Name Parsing, то есть парселка Имен Типов.
Оказывается, это довольно часто операция, но помню, это мой красов, и она, в принципе, доступна в Систем Type, вы можете взять Систем Type, там что-нибудь попарсить, но Систем Type очень тестно завязан на, собственно, Rantime, и все такое, и требует загрузки сборки, там вот это все, теперь, в общем,
у нас есть отдельный тип, который имеет метод и парс, Трай Парс, который, собственно, возвращает в ответ о некоторую мустро-ктуру класс, в котором есть имя, full name, SMB, qualified name, а также пачка свойств виды там. Из рей, из поинтер, из nest, из конструкта, дженерик Type, в общем, все, что вы можете узнать про тип, там плюс-пинус есть.
Таким образом, если вы хотите чистого парситами на типов, это все находится в namespace, точнее, в пакете, систем Reflection, методата, можно использовать нoghet-пакет и просто парсит строчки, чтобы вам для этого тип как-то кого и, в общем, ну, просто распарсит строчку, если вообще про
этот тип ничего неизвестно, а есть только строчка, понимаешь, что кроме имени вы ничего нам не получите, а вот если этот тип где-то доступен в каких-нибудь методанных, то тогда получите все эти наименования, где с живёской к системе Type. Как-то странно, мне кажется, смешивается для концепции, ну то есть, String Parser понятно, но тогда они я оснаю, причем здесь есть R&E и Stract. Ну вот если мы с чего-нибудь все это достаем.
И понятно, потому что вроде как действительно, если у тебя передал большую вот эту полноценную, особенно, помнишь как там старым фронг ворке, да, Фули-Колефайт Ней, там соседи. Да, Фули-Колефайт Ней, нормально, переверю.
Вот это всё распарсит, плюс в случае там джинариковость, вот это всё, действительно как бы отдельная задачка, и там имя full name и я себе легко-лифайт, в принципе, а тут можно достать плюс минус, не из всего, но можно попытаться, а вот всё для всего остального, понятно, что тебе нужен сам тип, чтобы посмотреть на его методанно и вокруг него. И это уже вообще совсем другой домин. Да, он же не как с тлинг-парсом не связана.
Ну, с другой стороны, это всё же в системе Reflection методата, то есть он всё работает поверх методанных и может быть в этом смысле, как бы, скорее всего, если ты хочешь партий эти именно типов, наверное, ты захочешь что-то про них узнать, поэтому после же дядя... Нет, я не хочу загружать, я просто хочу отчить, хотел бы иметь возможность попарсить, без загрузки, без поднятия каких-то методанных, без обращения, как это. Ну а на себя тебе попарсить, куда ты их дальше используешь.
А, не знаю, я придумаю. Ну вот, как бы вы уже хотелось бы помочь. Я обсуждали, как бы хороший юский, есть придумать здесь та же самая фига. Я как-то занимался генераторами и типов, и там у меня были такие задачи, когда нужно было просто распарствовать. Особенно когда дело касается какие-нибудь nest-это типов с джинейриков ложенностями, вот там вообще начинается непредсказуемную штуки твориться.
Ну то есть, если мы пишем генераторы, то там задача как бы попарсить именно, сделать новое имя и узнать, что это за имя, она довольно часто встречается без типов. У меня нет такого типа вообще. Ну генераторы возьми Рослин, да. Все это, Рослинным делаем. Насновей сходного кода. Ну, не знаю, пообщем тоже пока непонятное штуку, ну зачем ты нужно было, я не читал честно говоря, я не шли на тему, зачем это не дрели, но наверное там есть какая-то мотивация.
Ну давай дальше, дальше у нас раздел про SPNAT Core. Здесь появилась несколько в основном вещей про Blazor, но начнем мы и начнем с Татикой Бесет, делевери, у нас есть давно возможность использовать метод называется useStaticFiles, и там это понятно кусочек металларки, которые будет сервить ваши эстетические файлы, которые лежат по обленному пути, не отдаю обработку дальше в ваш pipeline металларий.
Так вот теперь место useStaticFiles, можно использовать метод называется mapStaticSets, там более общие названия за использовали, и вас будет проходить некоторые магии в том смысле, что во первых, все осоты начнут сервится автоматически с жатыми, то есть он будет автоматически все это
компрессить, причем компрессия происходит не на лету в момент запроса файлов, а в момент buildTime, то есть mapStaticSets она какая-то относительно магическая, она как сказано влияет еще и на buildTime, то есть момент buildIlePublisha, у вас уже будет готовый генерится гзипнутые, асоты, которые будут потом металларки просто отдаваться на лету.
И в момент отдачи, будут еще вешаться всякие специальные ятаги, заисменность от контента, такие специальные, что это пеходора, которые позволяют браузеру закушировать у себя контент, и мне перезапрашивать его за ново, если этот хедр не менялся, ну и там есть еще всяких хедрак, которые позволяют сказать, на кого долго можно его закушировать, если сколько браузер проверишь, там что-то поменялось.
В общем, автоматически у вас будет по быстрее все работать, и если вы там отдавите статики, например, не знаю, GS файлики, то они понятно очень хорошо гзипнутся и будут быстрее передаваться. Если вы, конечно, за ранее сами не настроали гзипнутый металларьку, до статики файлов, наверное так все делают, не знаю. Дальше про Blazer, Blazer Server улучшили в вопросе реконнекта.
Внезапно, там не было Exponential Back-Offs, то есть он delbilsa Server, ну, сфиксированным интервалом, и теперь там есть Exponential Back-Off, когда он понимает, что у него пропал коннекшен.
К сервером будет так периодически у вас, спрашивайте с увеличивающимся, там имал там, но если пользователь вернулся в приложение, не знаю, как они определяют, ну там не знаю, как он получила фокус, приложение еще чуть-чуть, там раундерий, чуть-чуть, сработала, контихендер подобный, то он забьет на Exponential и тут же пойдет пытаться реконнеться мгновенно, ну чтобы обеспечить такой типа smooth, die, гладкий, бесшовный опыт, чтобы как можно быстрее законнеться.
А если поймет, там еще будет такая ситуация, что типа сделать реконнект не получится, потому что там что-нибудь на сервере типа не разрешается, ну то есть там как-то хитрогоннекшенно используется, что вот прямо реконнект сейчас не получится, потому что сервер тоже
попытается от дедоса, зато с этим и так далее, но если вы зарефрешите с тренечку браузера, то он воспринимет это как новый, как бы он с приложения и разрешит, и вот там сделан логик, что типа если мы понимаем, что законнектится не получается, но по причине того, что серфу что-то нам отлупливает текущую сессию, то он еще автоматически с тренечку браузера из реврешт, и тогда у вас будет прям совсем. типа, само должно реконнеться почти всегда, как написано, пошмотли.
А дальше мы про blaser когда-то давно обсуждали, что у компоненты есть разные режимы рендера, то есть там бывает. серверные, соответственно, бывают фронтовые, ну в общем, разные не бывают, теперь есть опишка, которая позволяет понять внутри компонента, в момент рантайма, в каком она режиме работает.
Это все, находится в проеперте класса компании database, проеперте называется placer, правда, в новости в статены написано, что она будет переменован в рендер инфа, и из нее торчит всего два свойства, это name и из интеръектив, ну из интеръектив, это понятно, trolley falls, а name там 4 варианта, возможно, статьи все реврессом были в в вью.
Таким образом, вы сможете понять, и как сам не знаю, компонента может менять свое поведение в зависимости от того, как она сейчас и где она сейчас рендерится. Не могу придумать узкий язык, а зачем, ну, наверное, можно быть полезно. Так, ну и какие-то мелочи про authentication state, ization, чуть более простили, и новый салюшин теплейдер для dotnet, maw, blazer, hybrid приложений. Ну, новый, новый, ладно. В E в кор добавили всего две ш, ну там добавили кэш побольше, все каких-то бакфиксов.
Но основных в статии вошло два, это улучшили немножко database provider для E ж космос DB, если он работает с режимами nouсикл, а также улучшили то, как транслируется запросы в целом E в коре, если у вас используется комбинации типа там count неравнуллю или count больше, ну для оно очень таком дуфим, они получат стали транслироваться. Плюс, научились транслироваться метод time only from date time, и time only from time span в внативный сикл.
И в общем, это все про E в коре, там весь ревиз, что-то типа там типа, а о чем мы пофиксы лишись багов, все релизноуты, типа до две недели больше не успели. А и мау, и в этот раз не только перформанц, импробменсинг, и квалити, что-то там. Ого, да. Ого, про ближе к релизонеру, вот. Да, там прям целых четыре поинта. Значит, первый 포인т, я уже сказал, это blazer hybrid, hybrid, блин, blazer hybrid updated time plates, но те самые темплame plate для вижу студии.
Второй они поменяли, ну если меня, как мы помним, мау и не все рендерит сам, а, вот так сказать, делегирует рендерер, собственно, нативным опишкам, поэтому нужно иметь доступно нативным API, и вот в этом релизе они не поддержали биндинги для Android, API 35 бета 2. Тоже так себе, мне кажется, версионирование, в общем, 35 версия бета 2, да, Android, а теперь поддержано.
Пользуйтесь. В LVM Marshalled Method, они включены теперь по defaultу, если у вас не blazer приложение для Android, не очень, а ну да, мау и, но не blazer, тогда у вас будут LVM Marshalled Method доступны. Ну и улучшили там треминг, по теперь более точно работает треминг, поменьше вырезать нужного и побольше вырезать не нужного. Типа какой-то, не знаю, уж насколько это сильно меняет опыта работы с этим, с мау и там каких-то сравнительных чисел, к особо я не видел, но посмотрим, поглядим.
Для меня сколько понимаю, что главная проблема мауя, это сейчас огромное количество багов, а не с багами никогда не отчитывается, хотя бы там в процентах, там или в тысячах. Нет, так не отчитывается, там даже есть в сатена, например, есть специальная раздела типа там iOS, ну потому что все основные, да, раздела он Android, вот эти все там, а вот это все Android, да, iOS там написано, релиз из Focus on Quality.
Все, весь как бы, весь раз все содержимое раздела про iOS, больше там ничего не написано. Так что не какие в чисел, док, если на Загитхарму спалите, ну я… Блин, вот, что ли, магический треворг, если у нас есть слушателях разработчики, которые работают там на мау, или более близко там стал сообщается с этим треворком, приходите на пишите, выпуску, приходите, мы вас пригласим, как-нибудь обсудим, как у него там дела, потому что последние годы как-то непонятно.
Магическая штука, которая якого никому не нужна, и вроде все еще как-то живет и пахнет. Да, мы при этом по ней судим, в общем, только по новостям и каким-то отзывам в чатах и на формах, ну, с Натальянной Гитхаби там, да, выше их, и еще где-то, потому что сами на ней не пишем, я пока не верю.
Ну ладно, певюшка вроде есть, как-то двигается, не сказать бы там, что какие-то страшные хорошие новости, нам до сих пор не завезли все такие, все, ширине, типа расширений, до сих пор их нет, для общего пользования, ну, ждем, ждем. Да, ждем.
Ну и традиционно, вместе с привью вышла привью, конечно, вижу у студии, называется, вижу у студии 22, кто она 17-11 по-моему поедет, сейчас привью и 2, я тут не записался в заметке, но, в общем, привью 2 короче, новой студии, там основное раздело, конечно, Капаллот, Капаллот
еще раз Капаллот, там теперь можно именагенировать и AI, генерайт от брикпоинт, экспрессионс, можно сделать, но все, что все, на скапаллот, там, лучше ли, углубили, или так далее, но есть и не только изменение, которое относится к искусственным интеллекту, в отладке стало
получше отлаживаться на арм 64, там были какие проблемы, добавили возможность блейзор Вибайсом для дебаглинг, удобную, хорошую, теперь есть брикпоинт группы, по-моему, они, кстати, были в прошлом привью, мне кажется, да, ведь если не в релизе, что я не помню, когда
брикпоинт группы добавили, но теперь по про не менее одну из групп можно поменять флажком, что она default, я просто вручную добавляю брикпоинт, но в студии кликнули, да, мы же кислево, стройшку кода, или там в девять, какой там шортка, добавили брикпоинт,
он теперь будет попросить такую группу, потефолту, можно такой назвать, и есть штука под названием iNumber был вежуалайзер, по-моему, она была уже в релизе, прошлый, так сказать, версии студии, но теперь это называется экспрессив iNumber, iNumber был вежуалайзер, штука позволяет
сделать следующие, вы берете такой нюмтя iNumber, который у нас у вас есть в коде, и в этом окошке вы можете прям в момент депага дописывать туда линкью выражения, то есть вы берете какой-нибудь коллекцию, вот в переменный, который у вас есть, ну коллекцию либо какой-то iNumber
был, и можете прям в этот окошке дебага написать там точку where, что-нибудь там точка, там не знаю, off-time, cast, не знаю, select, что хотите, и это все будет визуалидируться у вас в нежелижащем окне, такой типа, интерактивный, ну как шарплап, не знаю, линг-патт для iNumber
облудов, ну да, кастомные коммерческие средства для дебага такой уже лет десять позволили делать, ну, кастомные коммерческие, тут дошли руки у базового и бесплатного, ха, ну безусловно, безусловно хорошо, ну, наше идешка теперь можно включить ее автоматически, обдейте
вместе с основным винус обдейтом, это прям какой-то очень большой бигдил, там помочь, что не отдельная статья, а про это вышло, и мэц, кто он не торговит, крестенсон, который главный по этим экстендженам, вот этим всему, он прям про это, не знаю, в твиттеричь неделю
он писал про эти обдейты через Microsoft Update, не знаю почему это так важно, допустим, с точки зрения веба добавили в принципе полезную штуку, вижу в студии, там сейчас есть штука под названием Endpoint Explorer, который умеет по сканить ваш кот, ну и как-то
статический понять, какие рест Endpoint у вас в ходе есть, ну и их показается, это в этом окошке, вы там пони может что-то по-кликать поделать, но у вас могут быть какие-то Endpoint, которые статически не понять, ну например, вы подключите библиотеку, там многие
отпечатают пакет, которые в рантайме добавят еще какие-то Endpoints, так вот теперь, когда ваше приложение запускается, то студия умная, она понимает, что там куда загружается, понятное дело в момент отладки, или в момент запуска, и в этот Endpoint Explorer
докинет те Endpoints, которые были добавлены в рантайме, и их тоже можно потом, собственно, подергать или еще чуть-чуть поделать с ними, все на деле может в рантайме проанализировать ваше приложение, понять какие-то там рест контроллера есть, ну контроллера или, знаете, минималый Endpoint. И для Дутнета там, по сути, одна большая новость тоже заслужившая, прям
отдельно встатью, это новый ресурс Explorer. Если вы когда-нибудь работали на какими-нибудь не знаю, виндовым дисклотным приложением, то вы конечно же знаете такой ресурс Explorer, где вы там строчки указываете переводы, делаете, не знаю там иконки, задаете вот это все, и его прям довольно существенно переделали. В основном это касается именно строковой части, в смысле
управления строками, но она там прям прикольная. Во-первых, там теперь можно сделать от двумя малтери-сурс в видео, то есть увидеть, например, все локализации в одном таком виде, строчки у вас это ваше строк, я с колонки это езотины, которые переведено. Там работают поиск и фильтрация, у каждого перевода можно указывать комменты и видеть их в ресурс Explorer, и при этом есть выледация на PlaySholder в переводах, это прям вот штуку, на которую мы например напарывали все очень много,
это в английском тексте. Указал там какой-нибудь фигуреноскобичка 0 фигуреноскобичка 1, для будущего стринкформата, а потом переводчики решили шитку это хрень и не привели, это вообще и не включили. Вот теперь это все валидируется в студии, прям она говорит, что вот там английскому у вас было, а тут что-то нет, у фигня не заработает. Ну и там подказали всякие эксессыбили, тью а вот это помелч. А в общем, если вы работаете с ресурсами, посмотрите на новые привишку, там говорят будет круто. Ну вот
все провели в студии. Ну кажется, что да, для ресурсов прям мост хрп, то что получилось, надо пробовать срочно. Так, давай, по родновостям немножко отложим, закончим. Давай глубимся в статечке. Тут как раз меня на днях попалась хорошая статья про Consistent Build. И вот милей мы как раз сейчас не рассмотрим. Давайте я с вами поговорим о том, о как мы собираем наши приложения, а самое главное с какими версиями и с какими из дыка.
Автор решил поднять тему. В принципе, тема хорошая, несложная, но почему-то мало свящается, и поэтому мы решили тоже поддержать, поддержать такую такую нужную вещь. Прошет то, собственно, речь. Мы вы раз поговорим с вами про Global JSON. И на конкретном примере. Да, то есть когда вы собираете ваши предложения, на самом деле тот результат, который вы получите, то есть какое, какой бинарник, получиться на выходе, зависит от очень многих вещей. И эти вещи очень часто довольно сильно не индуитивны
и непредсказуемы. Если вы хотите углубиться в эту тему, то посмотрите на статечку, которая называется Reproduse Bull Beats. Мы его уже упоминали в наших старых выпусках, но опять же, не грешно будет ее освежить в вашей памяти. Так вот, Reproduse Bull Beats очень много в этом всяких тонкостей и хитрости подразумевает, которые мешают в вашему приложению собираться ровно в тот же бинарный код, который он собирался допустим
минуту назад. Вот и один из пунктов, это всего лишь на все один из пунктов, это то, что он может собираться разными версиями из дыка. Как это происходит? Ну, допустим, типичная команда разработчиков, когда у вас есть, как минимум, два разработчика, один работает на одной машине, другой на другой машине, между ними стоит с яй, так вот, у первого разработчика может
стоять на компьютере с дыка там какой-нибудь 800 версий, второй разработчик может быть какой-то модный хипсер, он себе 9 из дыка поставил до ТНТ в скир, разрабатывает под ним, и на с яй у нас там стоит тоже какой-то дыка, который поставили давно, там 800 версий, так вот, все эти с дыка они по факту разные,
как неочевидно, да, из версии. И между ними есть несовместимые фичи, баги и тому подобное, ну, например, между 8 из дыка и 9 из дыка, естественно, есть куча брекинг-ченчезов, и которые возникают не прямо вот в коде, что в скотне соберется, а допустим, хотя бы вросленный нарезатор или в студии,
или в компиле, или еще где-то, ну то есть, если вас разработчик локально собрал какую-то версию, и у него все было хорошо, он в этот момент может запушить это на сиай, и сиай в этот момент может упасть, сказать, я типа нашел новый анализатор, который считает, что тот код, который написал, он больше не проходит в валидацию, и смотря то, что локально все собиралось.
Или если он пропустит, то второй разработчик может скачать эту версию из мастера, и обнаружил, что мастера у него почему-то локально не собирается, хотя сиай прошел, все тесты зеленые, ну почему-то вот мастер не собирается, вот такая ситуация тоже возможно. А все это как раз происходит, потому, что все эти точки могут собираться разными из дыка.
Вплоть до того, что даже тот из дыка, который был раньше, например упомянут его 800, си шарп с дыка, дот на этот с дыка, он может содержать уязвимости, на самом деле он содержит уязвимости, именно поэтому его с докер хаба скрыли, его убрали, то есть на докер хабе вы больше этот с дыка
скачать не можете, хотя не смотря на то, что именно восьмерка реализилась именно с этим с дыка, то есть те проекты, которые вы переводили прям с самым первым на восьмерку, они больше вас не соберутся, потому что в на докер хабе данный образ больше не доступен,
то есть вы будете пользоваться и делокальным закошированным, ну или переходить на какой-то новый, то есть даже без того, чтобы ваш код поменялся, даже без того, что разработчики там что-то зачекинили и что-то поломали, у вас вполне может поломаться, билд просто со временем, потому что были какие-то секирутируюзимости, базовый образ просто на просто взяли и убрали из публичного доступа, то есть такое тоже может быть.
Вот мы тут описали кучу проблем, давайте немножко их подытожим, и так, прежде всего, для того, чтобы предсказуем и скампелировать приложение на всех машинах, должен быть один и тот же издака. Если издака отличается, то вполне вероятно, что на выходе получится что-то другое.
Может быть вообще не скампелиться, если какие-то не совместимые изменения были, а может просто выдать какой-нибудь бинарный код, который работает не так, как вы ожидали, если вас недостаточно покрыть от теста, то вы об этом даже никогда не узнаете. В общем, такой риск есть, его нельзя просто не возобить.
Теперь у нас есть CI, и допустим, такие CI инструменты, как Azure DevOps или GitLab, помогает вам забилдить ваш что-то приложение для этого, и должны просто вызвать какой-нибудь шаг, который называется, например, use.net subaq2, то есть второй версии, и все, и у вас магические образы все сбилдится. Но при этом вы не знаете, а каким издака будет этот CI билдить?
use.net subaq2 на самом деле установливает СДК 8 версии, при том 8 у него, он учитывый только мажор, все остальное может поменять как угодно, то есть может 8, 1, 8, 2, 8, 3, и при этом он позволяет установлю ведь привью версии, который еще не может быть не до конца отложены, и стабилизированный, и содержать какие-то там багги, или несовместимости с приведущими версиями.
То есть, понадеившись на какой-нибудь Azure DevOps на его шаг, который каким-то издака как-то билдит ваше приложение, вы очень легко можете нарываться на несовместимости как раз в компиляторах. Следующий шаг, помним, что наши СДК, наши фрэнфорки умеют секюрить уязвимости, и они вполне могут отозваться. Также, если они вдруг не отозвались, что это значит, если вы допустим, локально закошировали этот образ и не позволяйте никому естественно его удалять.
Что это значит, это на самом деле значит, что вы используете какой-то дря вы издакая или какой-то уязвимый фрэнфорк или какой-то уязвимый базовый образ. На машинах разработчиков это еще полбеды, но это значит, что вы скорее всего используете его и на продакшине, если вы за этим исследите заправильной версии анированиям издака. То есть, не решается проблема взять и просто на просто во всей компании объявить одну единственную версию издака какой-то единственной верной.
Поставить ее всем разработчикам, поставить ее на все СИА и забыть про это. Нет, такая штука тоже не работает. Издака нужно обновлять, нужно следить за эти секирутипачьями, за секирутирую уязвимостями и в общем держать свой инвармин как-нибудь консистентно и безопасно. И вот эти вот проблемы мы сейчас сами как раз в статье и рассмотрим. В принципе, всего этого можно избежать. Если использовать небольшие рекомендации.
Ну, во-первых, нужно явно указывать тот издака, с которым билдится ваше приложение, на которое вы рассчитываете. И эта издака должно быть явно указано везде на всех компьютерах разработчиков, на всех СИА и так далее. Это как раз и позволяет сделать фалик, который называется Global.json. Вторая часть проблем с секирутирую уязвимостями и обновлениями того издака, который мы зафиксировали, решается с помощью автоматизированных средств управления зависимости.
Давайте попробуем поподробнее вот как раз сейчас над ними над этими инструментами, над этими решениями и остановимся. Ну, во-первых, чтобы понимать, как мы должны персионировать и на что мы должны персионировать, нужно немножко получше разобраться, а в методиверсионирование до ТНСДК. На вид он выглядит как приличный симантий квежем, и вы думаете, что он действительно симантийский персионируется на самом деле нет. Никого отношения он к симантий квежем, но почти не имеет.
Ну то есть у него какая-то своя логика. Ну, во-первых, у нас есть мажорная версия, наверное, всем вам известный. Вот это дотнет 5.0, дотнет 6.0, дотнет 7.8.0 и скоро там у нас будет 9.0.0. Вот это мажорная версия.
Это как раз то, что вы прописываете вашим CS Pro-чфайли, когда вы указываете элемент в CS Pro-чфайли, target framework, там вы обычно пишете net 9.0. Вот это вот и есть там мажорная версия, которая вот выходит, реализится и поддерживается весь релизный цикл, пока он не выйдет в следующем мажорной версии. Дальше есть минурная версия, которая казалась бы, да, но с 5.0, 6.0, то есть вот этот второй нолик, который стоит это как раз есть минурная версия. Но на самом деле она не используется.
Начиная с дотнет 5, там всегда будет нолик. В общем, пока она нам не нужна, и поэтому никаких проблем с этих нет. Может быть, потом придумаю что-то не заязать, но пока просто гноль. Там всегда нолик. А вот дальше начинается интересности. Каждый месяц выходит в секвете обдейты. Эти секвете обдейты, еще внутри себя и могут включать не только секвете обдейте, но и какой-нибудь набор фич. А также обновлять какие-то компоненты, которые входят в SDK.
Например, тоже самый нугет, тоже самый компилятор и так далее. А они тоже могут обновляться. И вот эти изменения они все отражаются с помощью 3 цифры. 3 цифры обычно состоит всегда из 3 цифры. Есть 3 цифры, есть 3 цифры. 100, 1001, 21385. То есть этих цифр всегда сотни. И это неспроста. Потому что здесь зашита определенная магия. Например, если у нас есть 2 версии 1001 и 213 цифры, то это означает, что у них разные фичебанды.
То есть набор каких-то новых фич, которые выздавали SDK, были привнесены. Если изменяется 1 цифрка, то есть так, от which отвечает за сотни, это значит изменился набор фич, которые были привнесены. Вместе с этим также возможны брейкинчизы. Естественно, никто там каких-то страшных брейкинчизов вставлять вам не будет. Ну какие-нибудь мелкие, незаметные, там или в анализаторах или в параметрах.
Еще где-то брейкинчизы возможны, даже когда уменьшается вот это, то есть увеличивается, меняется, вот это 3 цифра. Это нужно помнить. Теперь если у нас цифра меняется не в сотнях, а в десятках и в единицах, ну допустим, версия у нас 101 и 199 в третьей цифре. Это значит, что используется тот же самый набор фич, тот же самый фичебанд. То есть никаких нововедений не внесено, но при этом могут фикситься сикиуритивой звимости и какие-то паги. Тоже могут фикситься.
То есть таким образом, самое главное цифра, на которое нам нужно смотреть, это третье. Когда мы обновляем наш издк. Третий цифр состоит из двух таких блоков. Это первый цифр, который там за сотня отвечает и две следующих за десятки единицы. Вот они значимые, они нам важны. Теперь, когда мы разобрались, что собственно за что отвечает версии и как издк может меняться, давайте посмотрим, мы можем улучшить наши проекты.
Самое первое, что стоит сделать, это создать файл Global JSON, который как раз позволяет объявить то, с помощью какого издка. Данный салюшин должен собираться, компелироваться, до ристорица пакеты, должен запускаться тесты, и в общем все то, что у нас делается с помощью, например, утилиты .NET. .NET. .NET. То есть, вообще какой издка используется, абсолютно для полной сборки и приготовки этого пакета.
Обычно этот файлик располагается в руте, то есть в салюшин директории, называется, он как раз сказал, Global.JSON. И если он отсутствует, то используется самый последний издка, установленный на вашей машине. То есть, абсолютно не предсказуемая вещь, потому что как бы поставили в новую версию студии, она с собой это издка, поставили новую версию какого-нибудь другого и дое, она могла предощить собой издка.
Или просто могли поставить какую-нибудь привию издка, и он автоматически подхватится как о всем вашем текущем рабочем проекту. В общем, страшная вещь. Вот чтобы такого безобразия не было, создавича такой файлик. Этот файлик довольно просто, и там у него буквально можно максимум 3 строчки засунуть. Вот, давайте по-дробной рассмотрим. Ну, во-первых, мы можем указать издка вершин. Это минимальная версия, с которой будет собираться наш проект. Почему меняли минимальная?
Ну, для того, чтобы как раз для гибкости. Максимальную версию с помощью которой будет собираться определяется следующим параметром, который называется SDK RollForward. То есть с помощью стратегии RollForward мы выбираем, а какая максимальная версия издка может быть, если вдруг минимальная не найдена на данные машине. Ну, есть какая-то допустимая недалекото-мотнее стоящее, то можем собрать с помощью нее. О, это параметра есть дефолтное значение. Это лата-стпачь.
То есть мы собираем издка, у которого не менялся мажор, минур и фичебент. То есть у которого менялись только последние для цифрки. Это вот самый безопасный вариант, поэтому он подефолт уйстает. И, соответственно, мы можем дальше этим жанглировать. То есть есть лата-стпича, когда мажорные и минурные разделы не менялись лата-стпминур, когда только мажорные не менялся.
И лата-стмажор, когда вообще может даже мажор меняться в большую сторону, естественно, может меняться как угодно, и говорим, что у нас предложение будет собираться и работать прекрасным без всяких проблем. Почему бы нет? То же такое может быть. И есть отдельная статегия, которая что это поменует, называется, она дизейбл. Это значит, что ни умничает авариич, никаких максимальных фи, максимальных версий у нас нет. Вот ровно то, что было указано в издаковежен, вот ровно ту версию используй.
Если ее будет не найдено, то ваш билт упадет просто на просто. Это гораздо лучше, чем собрать с не попадить чем. То есть лучше, предсказуем упасть, чем не предсказуем собраться. Какие здесь можно отдать рекомендации? Да. Ну и если мы говорим про 4 поля, вот там 4 еще есть голов, при релиз. То есть вы можете сказать, а можно ли с помощью при релизного издака собирать ваш салюшина или не стоит? И теперь давайте посмотрим все такие рекомендации.
Рекомендации для того, чтобы собирать ваш проект, прежде всего, нужно определиться с минимальной версией издака. Если рекомендации элементарны, используйте максимальную версию, которую вы только можете использовать в своих проеках. Естественно, чем больше издака, тем больше версия издака, тем ваш собранный проект будет лучше. Тем больше возможности будет у Сишарпа, тем больше возможности купиллятора, у Рантайма и прочего.
Ну, разумеется, если ваш проект собирается только поддот на 5 и не стоит ему выставлять издака 9, потому что наверняка ничего работать не будет. То есть максимальная версия, под которую вы можете собраться. Это ваш путь. Дальше. Для стратегии, для стратегии, как максимальная стратегия подходит для roll-forward. Это он лепачь. То есть, если пачь версия поменялась, то это хорошо. Значит, вы можете, в принципе, допустить собакобиллятор или запускатор. Дотнет выбрал именно такой издака.
Это позволит вам избежать бракетчинчезов. То есть вы точно можете гарантировать, да 100% уверенный выставив параметр, он лепачь, можете гарантировать, что он точно соберется. Там нет никаких новых анализаторов, там нет никаких бракетчинчезов, там будут только максимум фиксы багов, обратно совместимые фиксы багов и секюрити пачи. А секюрити пачи мы хотим ставить. Именно поэтому не нужно использовать экзакт. То есть, дизейбл. Потому что все-таки секюрити это хорошо и это важно.
А после того, как мы соблюли все эти рекомендации, чего мы добились. Мы добились того, что у нас есть в нашем репозиторе, он чекениться вместе со всем коном, вот этот прекрасный Джессон Файлик. Это значит, что во всех разработчиков на машине проект будет собираться четко тем издака, который мы прописали в этот файлик, не больше и не меньше. Если такого издака не будет, биллту пойдет, разработчик будет вынужден его заинсталировать такой издака и продолжит работать спокойно и красиво.
Также это значит, что этот издак будет использователь сборки на CI. Потому что, естественно, с каким фриворком мы разрабатывали, с каким фриворком мы тестировали, с этим фриворком желательно и крутить даже приложение в продакшине. Поэтому в продакшине у нас уже тоже предсказуемый хороший, понятный издак. И это прекрасно. Идем дальше. Такие сиассистемы, как например, Azure DevOps и GitHub actions, умеют понимать Global Json.
То есть, если им указать специальный параметр в чудесной ямолостройке, то они могут вам не просто запустить вашу компиляцию с каким-то. Дотнета СДК, как мы упоминали уже немножко высшей, а взять правильную версию из Global Json заинсталировать именно этот издак, который вы там указали и собрать ваше приложение ваш столюшен, так как вы попросили. То есть он будет собираться рону таким же, как и разработчики собирали вы на локальных машинах. Все прекрасно. Все как раз, как мы хотели.
А вот теперь у нас остается еще один интересный персонаж, у которого есть версия СДК, который зависит от версии СДК. Это, конечно же, Dockerfile. Если вы на вамодный хипстер, то естественно, весь билд у вас происходит в Multistage Dockerfile, то есть вы билдите в Dockerfile со всеми пересказуемыми зависимостими и вы также точно распространяете ваше приложение в виде обычного Dockerfile. Вот.
И если вы так делаете, то у вас в Dockerfile обязательно будет базовый имыш из которого выберете СДК и базовый имыш из которого выберете runtime. И в этих базовых имыджих у вас обязательно будет указано версия. Опять же, мы возвращаемся к этой самой версии, с помощью которого мы будем билдить и с помощью которого, с помощью которой версии runtime у нас будет работать. Вот. И эти версии они тоже должны совпадать с тем, что вы за имплементели в Global SDK.
К сожалению, нет инструмента, который берет ваш. Глуба SDK сравнивает с вашим Dockerfileом и каким-то образом магическим подставляет или корректирует это. В общем, такого не бывает. Но здесь можно зайти с другой стороны. У нас есть третья проблема, которую мы не решили. Если вы помните, проблема устаревших версий. Напомню, что версия с DK могут содержать секиуретию иззвимости. Их периодически нужно обновлять, естественно, обновлять как-то разумно.
Не просто автоматически брать какую-нибудь мажорную версию, а вот проходить весь по-планетестирование, весь по-под ревью и прочее-прочее. Поэтому в данном, чтобы подойти весь этой стороны, используется другие инструменты, которые называются как раз таки инструменты по управлению версиями. Они помогают вам держать версии ваших DK-пакетов Dockerfile в базовых образов вообще чего угодно позволить держать в актуальном состоянии. То есть, без бракенки чинчезов, но при этом секиуретий фиксами.
Что не может не радовать? Павлиски не звучат как Dependency Management Tools. Наверняка многие из вас, кто пользуется GitHubом, могли сталкиваться с таким прекрасным персонажем, как Depend do Bot. Это тот назовливый робот, который все время приходит и поговорит вам обновитесь, обновитесь, у вас там какие-то секиуретии в изимости нашлись в ваших зависимости срочно обновитесь, я вам создал по LowRequest. Вот Depend do Bot это типичный представитель как раз Dependency Management Tools.
Но, к сожалению, он работает только на GitHub. Нормально уважающиеся люди, естественно держат Solve Host решение. И здесь тоже есть инструменты, которые помогают вам сделать Depend do Bot local. Один из них, например, очень популярный, это Renovate. Renovate поддерживает все абсолютно очень много репозитория, которые вы знаете, это же самый GitHub и GitLab и Тебсети. И что только не поддерживает. В общем, много чего поддерживает, так же самое для нас, что актуально он умеет Solve Host решение.
То есть, не обязательно его пускать в интернет, можно установить у себя. И делает он практически тоже самое, что Depend do Bot. То есть, проходит по всем вашим зависимости, ну, которые там указали в КФИЛах. И обновляет их, соответственно, с правилами, которые опять же указали. Когда он находит новую версию, которая подходит под все от тебя писания, то есть, допустим, вашим издакан, нашли какие-то секирутии в изимости, и он хочет вам помочь обновиться. В этот момент он создает Пол Реквест.
В этом Пол Реквесте он может обновить Global JSON File, он может обновить Docker File, который мы упоминали, и даже нугит пакеты, которые есть в вашем приложении, он, естественно, тоже может обновлять. Все это он умеет, он довольно-таки много разных поддерживает форматов, разумеется, не только для Дотнета, как бы там, абсолютно большая куча. Ну, для Дотнета нам, в принципе, вот эти вот три довольно интересны.
После как он создает Пол Реквест, естественно, он его не межит сразу, у вас проходят тесты, у вас может быть, во время теста, находятся какие-то бракенченчезы, которые могут быть. Вот в это время вы должны, в этот момент, вы должны пойти, поправить. Бракенченчезы каким-то образом обновить ваш код, запушать все изменения в этот Пол Реквест, который он создал, и влить уже новую обновленную издакан, в соответствии вашей репозитории.
В этот новый издакастного версиями соберется уже на вашей сиассистемии, и пойдет в прот, устраня при этом все секирути развивности, которые были найдены. Таким образом, мы вот решили все поставлены задачи, которые были перед нами, мы получили какой-то предсказуемый билд, мы понимаем, каким образом он собирается, из каких версий, мы сделали так, что он собирается одинаково на всех машинах, на котором должен собираться, то есть билд и у нас более-менее становится предсказуемый.
Ну, и мы сделали, копежу, не самый маловажный вещь, мы улучшили безопасность нашего подхода, то есть мы теперь можем с помощью менеджементулзов следить за секирути развивностями во всех наших пакетжах, от которых мы зависим и во время пачтся. Так интересно, статичка, за подробностями, за конфигами, за ссылками по расследутика второго, если вам понравилось.
Также, если вас тема с репродюса был билдами, интересно, посмотрите на документ микрософта, чтобы уже разнуться от чего, в вообще-зависер, билды, оказывается, СДК-оберсия – это не самое страшное, что с вами может произойти. Но безусловно, одна из самых главных, поэтому следить за ней стоит.
Это точно следить за ней действительно стоит, следить за тем, что находится в вашем глуполызе, и сам он тоже стоит, и регулярно обновляться на плюс-менее в последние версии, чтобы получать секирутификсы однозначенно стоит, хотя бы в докереймаджах, не факт на сборках, хотя бы в докере. Слушай, кстати, странно, я когда создавал последний раз из темплейта репозиторий, ну как он даже не репозиторий, а там салюшин создается. Вот этот салюшин глобол Джессон не подкладывал.
Я не знаю, что давно не смотрел уже, так не могу вспомнить, какие-то свежие версии, но почему-то по дефолту нет в темплейте этого файла. А, очень важно, что нужно быть на последние версии всегда так круче. Ну, на последней версии да, но не на последний, который случайно найдется на машине. Вот это вообще разные вещи. А, но машине можно найти, что значит не предсказуемое. И это правда, это правда. Действительно.
Но в общем, контролируйте на чем вы собираетесь, и на чем вы главное запускаетесь в против. А пока пойдем дальше по статечкам, и у нас Эндрилов, да, но у нас не было Эндрилока, а тут вышло у него несколько статей, и мы разберем парочку, а именно про праймариканструкторы. Фактически, на самом деле вышло у него 300 япро праймариканструкторы.
Вот, ну, первым мы относительно пропустим там в основном разбор, про то, что это такое, я просто кратенько напонни, что про праймариканструкторы это такая особая конструкция языка с шар, когда вы можете написать там какой-нибудь паблик, Классперсон, и прямо дальше в скобычках указать поля.
Ну, на самом деле это не поля, это аргументы конструктора, то есть если бы вы объявили рекорд, то, понятно, то, что вы были в поляре, когда они преобразуются в проперте, автоматически редонали причем проперте, или как-то они. И не то он ли, правильно называть проперте, и все такое прочее.
В классе же это просто, если вы пишите паблик, Классперсон и в скобычках круглых, стринг, ферсные, миласные, это просто некоторые параметры, пока еще конструкторы, если вы их никак не смотри не используете, так и останется просто параметрыми конструктора. Но вы их можете внутри класса использовать, и в общем-то, у них есть два основных виды использования.
Один вид это называется, инциализация полей или проперте, когда вы можете внутри класс уже объявить собственно проперте или поля, и как мы обычно пишем инциализаторы, написать присоять, и вот это самый параметр конструктора, которую у вас вы объявлено не класса написан. Это один вариант, а второй вариант, в принципе, можете напрямую использовать эти самые параметры в любых других местах, и в ментлям, дах, методах, ну где угодно.
И в этом случае, если это так происходит, то компьютер за вас создаст внутреннее праве от поля, но будет как обычно, с какими-нибудь нехильными читаемыми имидами, но и заменит все использования этого параметра, на вот такое поля.
Простое штука призваны, ну как бы уменьшить вот это наши стандартные нагретажные конструкторы, где единственное, что вы делаете, вы пишете дисточка А, присвоить А, дисточка B, присвоить B, дисточка C, присвоить C. И хорошо, если это ABC, они какие-нибудь длинищие названия. Ну и все полящи заодно объявлять, таки же. Смотри, но в то же самое время они нам не упростили эту задачу, то есть я сидя вся такую локальную поля, я вынужден все равно их явно посоздавать. Да, да.
И плюс они внесли как будто недополимание, потому что большинстве людей, которые вот в разумно посмотрят на эту штуку, они будут интуитивно думать, что они будут, что они используют локальные поля, когда будут просто обращаться к параметрам-параметрам вот этого параметра, конструктора, который не присвоенный в локальный. Здесь тоже, опять, вводится к этой сложности, но фига. Вот, не понятно, но фига, янтери, собственно, по этому делаю проходится.
Значит, он не говорит про то, что, ну, собственно, что такое самый лучший способ использовать этого самого этих самых параметра, конструкторов, это, конечно же, инциализация силдов.
Ну, то есть здесь все просто и понятно, да, вы объявляете поля, и вы там где напишете, там правила какой-то, то есть, знаю, стринг, а, присвоить, а, да, которая была, там, брать стринг, сферс-нейм, присвоить сферс-нейм из конструктора, причем сферс-нейм и сферс-нейм, да, не как бы, вроде один тот же сферс-нейм, но один на топораметр конструктора, другой это поля.
Тут, вроде, все понятно, все, ну, хорошо и здорово, ну, единственное, что да, как-то правильно говоришь, все равно приходит списать поля, но если вы хотите хоть немножко вылидировать, а иногда в конструктором мы хотим вылидировать, что он нам пришло, то все становится
интересно, понятно, что влидация на нау, но она просто у нас есть оператор, значит, два вопросика, после которого можно представить, как у нее что-нибудь там аргамент на лэкзэпши, ну, что-нибудь в таком духе, и там все хорошо, но если вам нужно какая-то чуть более сложная влидация, то, что, строчку
проверит, то, что она пустая, например, там уже приходится и всячески приседается всякими тернарными операторами, либо городить какой-нибудь статик функцию, которую вы сможете вывивать и уже все-таки становится не очень красиво. Вот при этом, в целом есть сценарий, где это очень полезно, но то есть какая-то один из примеров, он приводит например тесты, ну если уберете типичный там xunittest, класс, то вам туда нужно прокинуть, например, itestoutputhelper, чтобы потом в тестах использовать его,
и вот это вот типичный шеврян, где можно спокойно закинуть itestoutputhelper в primary конструктор, не объявлять поле, спокойно использовать прямо этот output, например, параметров внутри, какого-нибудь теста, да, он закапчерится, да, он создас какое-то свое там, внутри не поле, ну да какая разница, работают и будет.
Вот и в тестах вам не так важно какой-то видимость этого поля, там мью-то было, но не мью-то было редоллель, не редоллель, это абсолютно все равно, вы в тестах, а второй кейс, где он говорит, что про мрам-праммарий конструктор, это очень хорошо и ценные
и здоровы, это создание классов, давайте так, с описания классов, который, скорее всего, сами создавать не будете, но у которых типично бывает большой количество параметров, ну например, контроллеры, то есть контроллеры вы никогда в целом не пишите там нью, что-нибудь
контроллеры, поэтому особо как бы проблем с тем, что там именование, какие-то, ну прятыщи чуть дальше поговорим, и ненативные, да, не соответствует код-конвеншенс, никаких проблем, особых с этим нет, второе, в среднем в конструкторе, в контроллере вы инициализируете всякие
сервисные, допустим, эти самые инстинсы из DI контейнера, и опять же, несмотря на то, что поля по defaults заживутся мью-то был, то есть они не редонли, особых проблем нету, вряд ли вы захотите какой-нибудь айлогер перепрессваявать где-то внутри вашего контроллера, поэтому в целом в контроллере
это прям выглядит, ну нормально, более-менее приемлема вот, слушай, ну ты описал вообще типичный мастервис, как, как, как, как, как, меня всех все выглядит, как контроллер, я в сервисе иди руками не создаю, у меня все через DI заинжики ну вот, ну видишь, в целом да, но вопрос как бы
каково вероятность, что если ты не знаю заинжектишь какой-нибудь, ну я не знаю, ай опшен, да, и что-нибудь, то ты не захочешь поменять его, почему-то внутри, понятно, что ты не захочешь, да, ну мы же как бы рядовленный расставляем не потому что там, не знаю, против
себя будущего, но и в том числе, чтобы все остальные дать понять, что олить у 3-довленный, а тут у тебя будет не рядовленный поля, ну вот как бы да, да, вот и поэтому не хорошо, что не доделали, вот и, ну, только как Россенди переходит к проблему, коих он насчитал
наш 5 штук, ну во-первых, это тот самый капчеринг, который может быть дублироваться, то есть если вы например создали поле, его заинцелизировали, а потом где-то внутри этого самого тела класса заисползывали из параметр конструктора заново, то фактически у вас саза с 2 поля, одно которое создали
вы, другое которое создал компилятор за вас, причем об ом ютубл, и если вдруг пологики, это бы может быть очень странная логика, ну например, пологики состояния того поля нужно менять, ну например, вы его не целизируете, какой-нибудь там начальным стейтом, да, а потом дальше пологики класса это стоит вы меняете, то надо не забыть, что у вас два поля фактически, причем ко второму обращаться нужно через название аргументов праймери конструктора, ну как-то странно.
Ну и если у вас, вы там считаете как-нибудь размер этого объекта, у вас таких объектов миллиарды, то это может быть, ну вы увеличите ваш размер, то вам в два раза легко.
Все так, к счастью, к счастью, про этот кейс компилятор выдает ворник, то есть если у вас включены воргинки, а если у вас лучше включены воргинк, а зерк, мимо не пройдете, у вас будет воргинк, потому что вы типа один и тот же параметр конструктора из окапчереля и использовали вынислизации, поэтому в счастью, от этого можно быстренько избавиться.
Второе, ну собственно то, про что мы тут уже много раз говорим, все вот эти вот неявные поля не ридобли, вот, скорее всего, скорее всего, есть вероятность, что это штуку может быть с пофиксерств будущих версиях шарпа, какими-нибудь очередным не знаю от рибутикам или ключевым словом, я не знаю, чем воскресательным знаком около названия типа или там вопросит, ну в общем, что-нибудь придумают, но есть вероятность, что может быть, это исправят, поэтому тут может быть, будет хорошо, когда-нибудь.
Это в любом случае будет смориться не так локатично, наверняка там придумают какую-нибудь, через но и безобразие, как конечно. Редон или будет, там будет редон или стринг, что они быть, чем ключевым словом, у нас есть. Ну да, с делаем как, но зато на учим компилятор громко не кричать и потом в будущем эту какого-то вроде заборщика, ну при, ну почему я сделал, нормально было сразу. Время не мало, они же это, теперь и тарательно все все все сделают, подожди, надо выжать 3-4 релиза, нормально.
Я вам слушал сейчас как раз перед записью подкасты, не до конца еще до слушал этот дотный трокс с как раз медсом торгерсоном, и он там так классно рассказывает про то, что блин теперь так круто, мы теперь вот смотрите, Паттер мачен, мы цел 3 версии в Сишар бы делали, это же круто. А вот, а ты хочешь сразу и все, погоди, не торопись.
Ну, должен же какой-то планчик быть, то есть хорошо пусть делают 4 версии, но они должны понимать, к чему-нибудь должны прийти, а потому что сейчас они на такого на городе, что без брактинь, чужие завони к этого не придут, соответственно, это уже не починиться никогда, мы с этим вынуждены будем жить.
Прав, это они тоже говорят, что ранние релизы вот таких участочных фич позволяют узнать фидбэк от пользовится ли понять, куда дальше идти, поэтому плану них может быть и есть, но они никому его особо видимо не говорят, плюс смотрят на реакцию комьюнити. Ну, слушай, я думаю, что что они с этим сделают, там что приведом или говорит, по-моему, все, кто тропал правиль конструкции, ну да ладно. Пряты, мне кажется, что если уже дошли в такой версии до привьют, вряд ли не будут прям настолько менять.
Да, непонятно, непонятно. Зажди, почему привьют правильный режанидж в релизе нет? Это же 8 марка. 8 марка? Да, нет. Да, это 8 марка, да. Это 8 марка, они в релизе, все-таки. Ну, так это все как бы, что-то. Зарелизе, нет, почему, ну, отключилось ловредом или написать, никого не мешает? Ну, шайт, чувство прекрасного, я ограничен я там, сколько у нас 80, что ли положено, строк. Вот, ну, я не хочу с ней ркумент на новой строке писать, не парсия. Мы до джавы еще не доросли. Да, что ты, кажется, что?
Колеси, все, оттолбивай. И длиной, ладно. Дальше, то, что ты сказал, что вот эти неявные поля меняют layout, класс действительно, то есть, если у вас есть какой-нибудь интероп и выка ваши структури внезапно или к чему-то к чему решили прикрутить. Прямая реконструктор, но будьте готовы к тому, что там все будет плохо, лучше не надо. Дальше, есть такая проблема странная с именоманием. То есть, с одной стороны, это параметр, и вам хочется их именовать, как параметр.
То есть, ну, как правило, так и молки есть, да, сточная с маленькой буквы. И, каждая, слово с большой дальше. С другой стороны, если вы к ним обращаетесь как поля, а у вас, например, кодин Конвентшен, как в Дотнете, когда у вас правят филды через подчеркивание, то, наверное, хотелось бы их с подчеркивания начинать.
Но если вы их начинете с подчеркивания, то в том месте, где вы используете конструктор явно, у вас, если вы используете вот named, аргументы, да, будут на им, аргументы с подчеркивания, что-то же не круто. Мы параметр с подчеркивания, странно выглядит. Короче, тоже такая мелочь, конечно, но непонятно, либо надо делать как-то, никогда не создавать явно, это ладно, нет проблем. Назовайте, как вы хотите, чтобы они у вас были внутри класса. Я, не, у меня, у меня, у меня, отболил лучше решение.
Надо жить по гайдлайнам, первых, Дотнетов, которые вы рассказывали, что подчеркивание это пережитки перла и сиблюсплюсов не делать и подчеркивание. Называйте нормально в вашей переменной, как и в онка-мелкейсом. Нука-мелкейсом, да. Да, филдыки-мелкейсом и все, и нет никаких проблем вообще. Ну, проблема в том, что это не совсем филд, если напишешь это за источка, и вот это вот имя из-за праймери конструктора, тебе компьютер скажет, извинение такого поля.
Вот, а такого, наверное, он, древлоко, нет, да, что у тебя немножко конфьюзит, когда ты побращаешься к этим переменным, как хрен, поймек чему, как он закапчен из строки, а вот как филдам, по чрезвис можно обратиться. Нет, есть у него где-то, я это явно не уносил свои заметки, но есть есть оно.
То есть он где-то там про это, он тоже проходит, не явно косвенно, но проходит, в одном из этих филдам, и вот мне кажется, что это для новичков, что излучает синтекс, если это вполне такой нормальный минус, потому что это не констетно, если так и соучается уже.
Вот, а самое последний пункт у него это то, что с рекордами, короче, это все конфьюзит, что очень сильно, то, что я сказал в начале, то есть если ты допустим, бляя, веша рекорд, скажешь, павлик там рекорд, пёрс, он внутри и с трингом, пёрсный, влазный, все будет хорошо, у тебя
будет рекорд, у тебя будут с ним два свойства, которые будут и нет, и сэд, соответственно, иметь, эти самые модификаторы, у тебя будет конструктор, все будет зашибись, а потом ты меняешь ключевую слово рекорд, ключевую слово класс, у тебя сам кот в этом классе, он как бы ск импилиться, но все, что его использовало, нет, потому что у тебя пропали автоматические созданные свойства, в общем, все пропало, ничего не компелируется, то есть.
Ну, надо поменать, понимать, что это не такой шредкий случай, когда мы классы меняем на стакты, во время, там, перфоматься, поднимется, какие-нибудь и наоборот, стакты тоже часто бывают, переходят в классы, когда они становятся большими и копируют их слишком накладно.
Ну, вот, сделать даже не в трактах, рекорд, у тебя может быть рекорд класс, тут как в рекорд даже у нас переклассы могут быть просто… Да, могут, опять же, там есть рекорд и стакта, есть рекорд и классы, то есть там тоже можно забудуть.
Да, если ты… Ну, и из рекорд и классы перейти, вот с такой более продвинутый класс, где тебе может потребаться прамерик конструктор вполне могут быть такие моменты, что, например, тебе рекор да уже мало, и ты хочешь переписать на нормальный класс, с полноценным большим набором, не знаю, чего. Ну, да, как только у тебя там появляется пару проверок, тебе уже становится его мало. Вот, короче, вот так не делал. Ну, я че-то, че, чё, стой да?
Вот это вот статья про то, что, ну вроде есть и плюсы и минусы, как бы он приходит к мысли, что, внутри своего кода, да, то, что он пишет, надо понимать, что я понимаю, что он там где-то разработит. Он… в дотодов же, сейчас, по-моему, да, он до подешку, до дотнета, до дотнета.
Вот, это он говорит, что мы как автор и льбы, ну, как бы он нам тоже надо это осмотреть на… клядеть на то, какие классы наружимы предоставляем с какими именованиями, вот этим всем, тут чуть как бы обширные проблемы, да, всем в своей собственной кодовой базе внутри компании.
Вот он говорит, что мы вроде как, ну так, внутреннее соглашение, ну или в одобличное мнение, которого он, что всем доносит про то, что мы используем прамерик конструктора только в режиме инициализации филдов, то есть ты все равно руками прописываешься филды, все проперти, все чу надо, а прамерик конструктор чисто ради, чтобы не писать эту партянку с дысточка призвать что-то, ты ее просто переносишь в объявлении текст самых полей. В принципе, ну, как чуть сокращает код в порядные дела.
Вот, но возникает вопрос, а как же сделать так, чтобы ты случайно не с уязал его где-то еще? И вот тут появляется уже третья статья, про то, что можно использовать для этого росли на налайзер. Вот, более того, такой росли на налайзер существует, он находится в пакете. А в государственном исполнце, как он называется, если не записал, он опубликован на нынгете, но в описании этого пакета написано не использует пакет, он только для росли на интернел-юс.
То есть это такой нынгет пакет с росли на аналайзерами только для репизитории росли на. Само у себя. Команда росли на такая умная, что хочет правильно использовать, а нам навязать всякие глупости. Ну, там просто в пакете на самом деле есть и полезные на лайзерах, типа этого, на самом деле там просто кучу все, которые очень специфичные именно для росли на. Но, Эндрюн написал статью, как его таки добавить. Вы, ну, добавляйте как обычно нынгет референцию, вопросов нет.
Дальше вы ставите такой препротив вашим цеспроджен, называется аналисис МОТ рослин диагностик с дизайн, и значение у него должно быть All Disabled by default. Таким образом будет ключи один на фиг все. Эти самые анализаты из этого репизида, из этого аналисис МОТ, а дальше нужно включить только нужный вам. Для этого в Эдитер конфиги, я не понимаю почему ни в цеспроджен, теперь в Эдитер конфиги нужно добавить строчку дотнот на диагностика.rs0.62.
Точек северите, ну и дальше поставить репизитор репизитор, чего вы там хотите. Вот и rs0.62 это как раз таки ошибка аналазера про кепчеринка. И вот и казалось бы на этом все, все то равно мы за дизаблюсь и все. И включили только нужное. Однако на этом проблем не заканчивается, потому что этот нокет пакет тянется собой еще барочку, транзитивных рослин, ну пакетов с рослинами на лазерами. В частности, там есть паблика API на лазер.
Если вы помните, я по-моему выпуска 3-4 назад мне кажется рассказывал про подход к паблика API, когда вы там держите файлик, паблика API.publistex, паблика API ан, паблика API.publistex, там как-то между ними все сортируйте, это очень важно для бюллетег, где вы хотите четко менеджить, что у вас входит паблика API, что не входит, но если вы делаете код, которому это абсолютно не важно, то аналазер вам не нужен. Его тоже можно выключить через репизитор конфиг.
Для этого туда нужно написать следующую строчку. Этот паблика API на лазер точка RIPI files внезапно тру. Я бы ожидал фолс, ну как бы вот если поставили RIPI files в тру, то почему-то аналазер паблика API выключается. Наверное, в этом есть какая-то тонкая и важная долгий коно, в общем выключается. Мы будем надеяться, да что вы не используете параметры этих конструкторов, используется только для антиализации Poly или RIPI, а не для Аника, а в Коде. Методов, Катан, Репертией или еще чего-то.
Н Ди говорит, ну, ровно, конечно, вариант, но по большому счету, проще такое аналазер, если у вас есть пакет с какими-нибудь локальными аналазерами, просто закинуть себе, потому что там весь аналазер типа 20 строчек код или 30, около того он прям в ста-си его и приводит. В этом типа какая-то очень простая логика этого аналазера обрала благорослен довольно мощной штука. И он вот этот написанял аналазеров не очень сложный в этом случае конструкции.
Поэтому если используете параметры конструкторы или думаете о том, не затощит ли их свою кодовую базу, обновившись на 8-ку. Дотнет, посмотрите, и подумайте, как же вы хотите использовать параметры конструкторы или не хотите ли вы их в чем-то ограничить их использование в вашей кодовой базе. Если хотите, смотрите статью, там написано рецепты.
Ну вот нам доставили фичу, которая в принципе нам сократила немножко там пару строчек кодов в написании, но при этом улучшило чтение, улучшило понимание того, что реально происходит, а самое главное улучшило аутпут, то есть тот код, который мы в результате компиляции получим. И также точно вполне вероятно там наличие баговы за вот этого капчурнга, который может быть иногда кем-то не провериться, или как-то хитрый закапчурится. Или там у него еще есть пора проблемы с передачи в базовой класс.
Такое ощущение, что намного легче ее не использовать, тебе не кажется, чем вот эти все кастыли гродить, договариваться, анализаторы подключать, следить за этим совсем. Ну слушай, у группы говоря, вот в классах типа контролера, ну, которые в большинстве проектов не создают с руками, кажется, что проблем с этим нет. Хоть капчере, хоть то дело, ну какая разница большая у нас еще тут. Ну мне редольный, отсутстви редольный там смущает.
Ну вот, опять же, кажется, что в контролерах, наверное, это не очень важно, хотя, черт знает, меня тоже не тоже не смущает, да? Если бы не было важно, мы бы его не использовали, а так у меня весь кодомаза на рядовом или значит, где-то это важно. Еще и класса сил, не быть. Ну обязательно, хотя бы это они не это самые, не забрали у нас, хотя бы это мы можем добавить. Ну вот и там, я думаю, сможешь. И это с тех говорю, еще ключевое слово и нормально. Эксплисе 3D, лимплисе 3D, лимплисе, что-то.
В чем в классе, будешь писать, паблик, класс, имплисе 3D, лимплисе, нет, паблик имплисе 3D, лимплис, вот, мы будем нормыли? Ох, ох, ох, ладно, пойдем дальше. Сейчас, спосные расстройства. Что бы нам успокоиться? Я придумываю идеей, я не пишу на гитхап в Сишарп-Команду, ты продусься. Да, мне кажется, они как бы выловят, ловят все идеи, которые ты придумываешь, и потом им племенит. Хорошо, ну поэтому ты, там поменьше генеримыли, хотя бы не будут подсказывать.
Не подсказывать, не подсказывать, то будет. Давай, немножко успокоимся, чтобы успокоиться, у нас есть нормальный раздел, называется архитектура. Безусловно, каждый разработчик уважающий себя, естественно, разработчик должен стремиться стать архитектором. Поэтому мы регулярно в нашем подкасте для тех, кто уже дорос, но, в естественно, да, до этого уровня, рассказываем про архитектурные статечки.
И вот сейчас время медитации, поэтому на литичи ее есть, и погнали, промедитируем про одну интересную предъяву на брос. Называется, он что вы не должны использовать натуральные ключи для того, чтобы выставлять правимарики у таблицы. Тоже, вокруг меня часто возникает эта тема, и вот как раз мне Марксимон попался на глаза с этой статьей, и он тоже сказал, что вы, в принципе, все задолбались этим доротским заблуждением, почему он уходит, до сих пор непонятно.
Я так порелся в уголках своей памяти, откуда вообще это поверие пошло, что мы должны выбирать натуральные ключи, и что натуральные ключи, почему-то лучше синтетических, лучше искусственных, не касается какой-то из-за этих, из-за модных, небожителей, такой проповедовал. И как-то нет, это не приходит, но он откуда-то вообще взялось? Нет, что-то я не могу сообразить. То ли чистый код, то ли деди, то ли вот эмоции.
Я не помню, где явно хоцилык про это, я мне кажется, это во многих книжках есть, и может быть, в них это используется для упрощения, ну то есть понятно, что когда у тебя есть какой-нибудь модельный пример для книжки, чем городить еще один, как бы ключик, ну зачем, вот он у тебя есть, код прощик, а очень читать ли удачи.
Опять же, если мы говорим там о новичках, вот который только начинает свой путь, то им гораздо сложнее объяснить что-то к натуральный ключ, чем это череват, и какие баги у них будут, чем про всказать чуваки, всегда гай, гуй ты все. Ну, может быть, не знаю, не знаю, в другой страны многие верят что-то в Мизленно-Верпаспир, то Никалин.
Вот давайте про это подробнее поговорим, потому что действительно многие верят, и в общем, независимо от их титула такое заблуждение встречается довольно от их часто.
Вот и Марк, как бы посмотрел какой-то там очередной курс по проектированию басданных, и какого же было его удивление, что на приличном солидном курсе начинающим разработчикам, опять же, вешает это лапшу на уши, что басданных должны дизайниться с точки зрения натуральных ключей, то есть, если у вас натуральный ключ, то он должен быть праймарьки кием. Что такое натуральный ключ? Это то, что мы в нашем мире допустим используем для идентификации.
Ну вот, есть у вас человек, у этого человека есть имя. Естественно, каждый мы очевидно, что имя уникально. Ну, как минимум, может, фамилий не уникально, а им фамилия точно уникально. Но если имя, не уникально, то имя фамилия, в качестве, но вот точно везде уникально. И вот это называется естественный ключ, натуральный ключ, как-то и вы еще наверное называют. Вот такие ключи рекомендуют на курсах дизайна басданных создавать, иногда кое-где до сих пор почему-то.
Давайте разберемся, а действительно, эти хорошие идея и действительно стоит ее придержаться. Ну, для примера возьмем какой-нибудь панальный приметчик, допустим, вам нужно создать таблицу, которая будет содержать в себе 50 самых лучших ресторанов в мире. Да, а в обычный студент после такого курса создает таблицу ресторанц и у нее там допустим четыре колонки. Это год, за который мы считаем эти 53 сторонов, это позициально, на который находится ресторан, это name.
То есть имя ресторана, как она называется, и может быть имя висите, имя города, в которой этот ресторан расположен. И курс осоветует выбрать здесь обычный и натуральный ключ. Что же может быть здесь натуральным ключом? Во-первых, можно сказать, что никакой дополнительной колонки с ключом мы не заводим, мы пытаемся здесь найти как от натуральной. Но вполне натуральный может быть ресторан name.
Но опять же, имя ресторана наверное может пересекаться, если там какой-то не мировой известный бренд, даже первые известные бренды делают какие-то брончи, франшизы и так далее, и тоже могут называться одинаково в разных городах. Ну можно сделать составной ключ, можно сделать имя ресторана и плюс имя города, в котором находится этот ресторан. Более или менее, наверное, это уже как-то прокатит для топ-50, если мы говорим, лучших ресторанам в мире.
Но вот чем начинает отличается обычный разработчик от хорошего разработчика, он начинает хороший разработчик, он начинает это решение каким-то образом челленджить. То есть он начинает думать, а действительно для это так. А действительно ли все рестораны вот подходят под это условия главного ключа, то есть не может быть двух ресторанов со одинаковым именем в одном и том же городе. Ну наверное, если мы делаем топ-50, то не может.
Хороший разработчик понимает, что если бизнес сегодня попросил сделать табличку, то 50, заторм попросил сделать топ-100, потом топ-1000, а потом давайте делать вообще справочник всего ресторана, всех ресторана во все мире. И когда мы делаем попросчик, всех ресторана во все мире, действительно для нам хватит имени и города, как натурального ключа. Ну теперь уж точно не хватит. Можно добавить кантри, то есть если у нас будет в принципе страна, то это уже как-то еще сужает нашу область.
Ну даже если мы добавим кантри, то есть у нас получается допустим в России, СПБ, великий самый лучший ресторан, называется шаверма. Как вы думаете, сколько в СПБ ресторанам, который называется шаверма? Если вы думаете, что нужно добавить какой-нибудь регион, то есть район города, в котором мы наш списочек немножко сужаем, то нет, район вам тоже не поможет. Я думаю, что даже на одной улице десяток таких ресторанов найдется. То есть это ключа все равно не будет уникальным.
То есть вы его в уникальность никак не приведете, какими вашими приседаниями. Уникальность, если мы разбираем общий случай, не какой-то очень узкий офенчастый, оно насопрождает очень много где. Например, часто в регистратурах или в паспортных столах уникальным ключом выбирается фамилия имя участвового человека, что тоже абсолютно бред. Это абсолютно не уникальные показатели.
Также точно как например могут справочники городов выбираться, что во все мире город будет назван уникально, без учета страны. Это тоже бред. Никогда он не будет назван уникально. Но это же относится к любимым, например, моделям. Модель телефона, моделя автомобиля, еще чего-то. Они тоже не с маляонтошного вам кажется, что ноги от 30-30. И единственное во все мире нет. Бывает кроме ноги еще какие-то изобретения используют в чьи цифры.
В общем, когда мы говорим о каком-то человека читабельном имени, то скорее всего можно найти кисы, где оно не уникально. Здесь нам вот этот естественный ключ подходит не очень хорошо. Теперь поговорим про другой аспект. Это идентичность. Ну, допустим, с саменами конечно, пример может быть вырожденный потому что до этого иногда журнер додумывается, что имя может быть не уникально. Но у нас есть другие примеры, которые прям явно говорят, что их нужно использовать для этого натурального ключа.
Допустим, тот же самый виномер, который он есть во всех автомобилях. И четко деклорируется там в любом справочнении, что виномер он уникален. Он во все мире уникален. Сто процентов уникалина никуда вы от этого не денитесь. А также, например, есть номер паспорта. Номер паспорта тоже уникален. По-онамеру паспорта легко можете определить человека. И никуда вы от этого тоже не денитесь.
Более того, и номера паспорта, номера паспортовой, вины, они уже есть в какой-то базе данных, где они точно 100 процентов уникали. Например, в паспортном столе там наверняка у них есть список паспортов, где номер паспорта уникален. Вам кто-то в стороне даже уже гарантирует, что это точно уникальность. Надо ли вы вам использовать это вывод? Номер паспорта у себя в таблице, как уникальный. В принципе нет.
Потому что действительно вы можете по номеру паспорта индивидально определить человека, то есть уникальность у него может быть хорошая. Но вот какого человека, когда вы определите, вот это уже вопрос большой. Может, один человек может иметь несколько паспортов. В этих паспортов естественно будут разные номера. Также, допустим, старые его спаспорты вы упоминяли, да, вы можете его просто поменять. А также вы можете получить еще как-нибудь второй паспорт. Может быть, другой страны.
Может быть, в старые потеряли, а новые получили, и восьбватом актуальных паспорта будут. Или вы можете вообще не иметь паспорта, в принципе, ничего не мешает. По конституции вы не обязаны иметь паспорт, ничего не мешает жить без паспорта. Это кисть тоже в Алидин. Ну то есть мы видим несколько ситуаций, когда казалось бы номер паспорта уникальной, все хорошо, но для идентификации человека он он не подходит. Особенно если мы говорим на какой-то конкретный определённый промежуток времени.
Вот у него вчера был один паспорт. Сегодня он поменял, например, у него другой паспорт. В общем, а это все происходит потому, что уникальность никаким образом не дает вам бьекции. То есть вы теряете немножко информации, так, о которой у вас есть сейчас. Ну, например, если вы говорите, что у нас есть какой-то виномер, да, и мы хотим этот виномер использовать как уникальный ключ для идентификации автомобиля, то вы можете потерять часть информации.
Например, если вы вместе с виномером захотите хранить регистрационные номер автомобиля, на тот, который выдаётся как раз юридически, который выдаётся в ГАИ. И этот регистрационный номер, естественно, может меняться. В вин автомобиле, то есть один физический автомобиль, отдельная вот эта шасси, рама, она может менять регистрационный номер в ГАИ сколько угодно раз. Таким образом, у них сегодня один регистрационный номер зато догою, регистрационный номер.
И вот эту всю историю вы теряете, если привязывайтесь к тому, что виномер вас является праймориключом, то есть естественный ключ. И таких примеров, их, в принципе, миллион. То есть таких адресов, которые уникальные, все хорошо, но при этом они не созданы для того, чтобы однозначно идентифицировать какой-то определенный средств данных.
Ну, например, упомянуто уже регистрационный номер, тоже казалось бы, он уникальный, хотя бы в пределах России, регистрационный номер уникальный, на его можно положиться. Но, опять же, нет. Мак адрес у сети тоже уникальный в пределах мира, но он меняется. IP адрес такая же точно ситуация, хоть и уникальный там в пределах какой-то машудизатор, но он тоже он меняется. Многие базы данных грешат тем, что ставят телевиномер телефона, как уникальный ключ.
То же естественный красивый, опять же, многие забывают, что у пользователя может быть несколько телефонов, может не быть телефона. Пользовались хочет поменять телефон, тогда начинается проблемы. Тоже точно ситуация с ему и адресом. Почему-то все рассчитывают, что у пользователя обязательно есть ему и адрес, он никогда не меняется, он всегда один, это полная глупость.
Те, кто работал в интерпоразе, сталкивался с такими замечательными инструментами, как конфлайнс, наверняка не разжелели, что у него естественный ключ это заголовок страницы. То есть вы не можете сразу дать страницу, две страницы с одинаковым заголовком, да он работает по типу вики. А вот тоже вот пример полного абсурда. Почему так было делать абсолютно непонятно? То есть без учетовера архии, глобальным, в одном подразделе нельзя так делать.
Поэтому мы теперь приходим ко второму свойству, ключа, которая должна соблюдаться и удовлетворяться, это идентичность. То есть уникальная сетка, и даже если вы нашли ключ уникальные во всем мире, то подумайте, что именно он идентифицирует. Теперь подходим к третьему шагу. Допустим, вы нашли идеальный уникальный ключ, который уникальный во всем мире, допустим он идентифицирует то, что вы хотите, это никогда не меняется.
Ну вот вы захотели физическую шассиидоми, шассииды идентифицировать, вот вам вин подошел 100% и больше вам, в принципе, а жизнь ничего не надо. Вы не привязывайте к нему не юридические регистрационные номера, они владельцев ничего, это у вас там ханится в других базах. Допустим, вы все это сделали. То есть могут быть такие ситуации. Здесь есть один финальный аргумент, который должен вас уберечь от того, чтобы все-таки использовать естественные ключи. Это ошибки вода вывода. Что это значит?
Это значит, что когда пользователь вводит этот вин-номер, он может обечататься, он может допустить ошибку. Это бывает ошибки вода вывода, это бывает ошибки, например, серилизации форматирования или, например, когда вы передаете данные из одного сервиса в другой. Да, один сервисом выдаёт, допустим, номера телефонов в одном формате, а тот принимающий сервис пытается пойти телефон, а распорсить совершенно в другом формате.
Более того, даже между, можно при эту ситуацию представить не только между разными сервисами. Допустим, когда вы свой сервис обновляете, да, у вас вы были, например, только локальный номера телефонов, только в пределах России, а потом вы сделали миграцию и какую-то в базе данных или в коде или ещё где-то. И теперь вы международные номера телефонов воспринимаете как правильные и адекватные.
Так вот, если у вас был ключом номер телефонов в одном формате, а потом стал ключом номер телефонов в другом формате, то нужно понимать, что все ссылки, допустим, на внешней таблице вам тоже необходимо будет обновить. Но ссылки-то ещё полбиды. А вот если вы эти праймы реключи давали куда-то наружу, ну, например, отправляли СМС-ки или отправляли емейлы с определенной сформированной ссылкой, который должна была вернуть вас обратно и четко идентифицировать вас на определенную запись.
А это записи доневцировалось вашим ключом. А ключом у вас был номер телефонов в старом формате. Так вот, после миграции вы этого ключа в старом формате, больше у себя в базе не найдёте, потому что он теперь записывается в новом формате. Вот и вот такая неконсистентность данных, вот такая изменяя мать данных, должна навести вас на определенную мысль. Потому что система должна быть заднезаннее на таким образом, особенно вот система хранения, долгосрочного хранения, база данных.
Она должна быть заднезаннее на таким образом, чтобы позаварять, крейтировать данные. Особенно это казается внешних данных. Те же самые номера телефонов, их формат может меняться. Вы можете осваивать новые рынки и во всех странах. Номер телефона более-менее отличаются. Ну, номера телефоны-то полбиды, если мы, например, возьмём регистрационный номера машин, то это вообще лютый охран. К тому каждой стороны абсолютно свои стандарты. Общимирового не существуют.
Или даже если вы возьмёте там тот же самый, и сошел Security Number, который тоже популярный, и очень, потому что он якобы уникальный, выдается человеку с рождения, никогда не меняется, так далее. Это тоже неправда, потому что были председенты, когда его формат менялся, добавлялись новые буквы в киновой циферке какие-то новые данные и приходилось как бы немножко подстраиваться под этот новый формат. То есть всё это меняется.
Поэтому вы должны дизайнить свою систему, тем расчётам, что любая внешняя информация может корректироваться. То есть те данные, которые вам сказали, что они никогда не меняются и будет только в этом формате, они в любом случае могут корректироваться. Даже если государство поклянится, что никогда их менять не будет, у вас могут быть ошибки позитерского вода. Вы обязаны уметь корректировать. У вас может быть взаимодействие с какой-то сторонней системой, у которой формация совершенно другой.
Вы обязаны уметь это всё тоже корректировать. Таким образом, мы приходим к тому, что все эти естественные данные, которые мега уникали, мега красивые, мега хорошие, они должны уметь меняться. Отсюда следует простой вывод.
Раз они должны уметь меняться, то есть корректироваться, их ни в коем случае нельзя использовать, как прайморик ключи для вашей базы данных, потому что прайморик ключи должны быть стабильными и не меняться никогда, даже если пользоватский вот их вёл некорректно, меняться нет этого не должны. И здесь мы вступаем в конфликт, тем что мы одновременно хотим отеданно и показывать пользователю, и поддерживать их в октавальном в коррекном состоянии, и при этом меняться не никогда не должны.
Поэтому мы приходим к логическому выводу, что это должны быть разные поля. Есть определенная поля, которая не меняется, уникальная, которая стабильно, которая ни при каких условиях не будет корректироваться, от чего бы оно независило. И есть отдельные поля, которые показывают пользовательские данные, которые показывают какие-то естественные данные, вот они должны это образаться пользователю и должны показываться.
Это абсолютно не значит, что вы на них не можете накладывать уникальные конструкции, даже более того, вы должны на них накладывать уникальные конструкции, если хотите, что ваша программа гарантировала их уникальность. Но, опять же, не путайте, это не прайморик ключи, и вот там его использовать не нужно. А что можно сказать заключение всей этой террады?
Марк говорит, что в те далеке времена, когда он был молодым зеленым и глупым, и когда пытался использовать натуральные ключи, не было ни одного времени, когда он об этом бы не пожалел. Поэтому сейчас он пришел к одной и единственной истине. Всегда нужно использовать синтетические ключи. Не загоняться, не думать, не рассчитывать на то, что они никогда-то там не поменяются, ничего-то там не сделают.
Нет, они поменяются, они скорректируются, они всегда будут не уникальными, в общем синтетические ключи наши все. Поэтому никогда не пытайтесь использовать натуральные ключи, а просто всегда делать синтетические ключи. А и будет вам счастье, ваши волосы будут шелковистыми, а на ваши натуральные ключи просто накладывайте уникальные констраиты, если для вас это важно, и живите безопасно. Мне даже добавить особо нечего действительно, всегда используйте синтетический ключ и все.
Вот, это бопеджес, смотри, это не сложно, да, в отличие от уник от натуральных ключей, которые ты обязан задумываться. Как бы их обозначить, как бы их скомпанить, как бы их передать, как бы их там поддержать, то есть слишком много непонятных сложностей. И 100% и потом в будущем, как бы на эти грабы наступишь, они тебя подведут.
Когда ты просто берешь синтетический ключ здесь, не надо думать, не надо ни каким образом загоняться серилизаторами, ты просто делаешь синтетический ключ и живешь потом сейчас ли он. Одни плюсы. Ну да, все пошло такая моду, вообще непонятно. Заодно есть еще такой эффект, что это самый праймарий ключ, и часто попадаются в урлах, каких-нибудь гетслэш, что-нибудь. И одно дело там будет гуит, и другое дело там будет номер паспорт.
Да, да, опять же, не надо забывать, что часто в такие уникальные ключи они очень часто бывают или там, персан у информации, или персан у насекиврите, или вообще какие-нибудь нежелательные данные. А если вы забудете засовывать вурлы, то это все кашируется, достается из кашей, всяких дей на спраксей, и это не очень хорошо. Да, все так. Ну давай пойдем дальше, у нас есть еще одна техническая тема, она такая. Четично новости, частично статья, но кажется довольно интересно.
И это обновление сайте документации Microsoft в незавтра. Я сначала, когда новость видел, подумал, как бы я обновился, обновился, что там пройти рассказывать, а потом прям новость почиталась, он такая глубокая техническая статья, поэтому расскажем про нее по подробнее.
А что-ка в чем, поскольку у нас дотная то пенсорсный, то когда мы нашли какой-нибудь интересную опишку, или полезную опишку, или просто вы используете какую-то опишку в стандартной бюлетике, она как-то себя ведет непонятно странно, но допустим, вы ее читать документацию в друг там написано.
Почему она себя ведет именно так в каком-то конкретном в вашем случае, а иногда там не написано, или в ваш случай какой-нибудь очень специфический, и тогда вы идете в исходный код разбираться, чё что происходит к чему, и найти где же она есть в исходном коде, иногда довольно большая проблема, но во-первых, нужно либо поискать по GitHub, а поищите там будет какой-нибудь не знаю, стринь Джоин, как вы думаете, сколько этих стринь Джоинов в исходниках, тут на это очень много.
Ну и опять же, искать что-то отдельное, перегрузок дофигище сложно, поэтому теперь в самых популярных как сказано в статье, улучшается как документаций, ну рефесс, документации по каким-нибудь методам, есть ссылки прямо на исходный код, то есть прямо там, где вас написано в какой обычной сборке, оно лежит в каких версиях поддерживается, там же есть прямо ссылочка на GitHub, где вы можете прямо почитать код, прям конкретные каждый функции.
Слушай, мне кажется, если бы у документации была бы киллерфича, то вот это вот она, я ловила себя на мысли, что мне очень часто не хватало такой штуки, я очень часто там гуглил на, искал на где-то хаби какие-то определенные классики, испытал все эти трудности, которые ты рассказал, и прямо вот это вот, именно то вещь, которую должна была быть везде самого начала, как только не за опенсор селись, это очень круто.
Да, у меня давно же склонировано в ронтайме репостериксии я спонет коррад поисторик себе, но опять же искать по ним это и это работает как минимум в Дотнета и Пиах, у которых выполненеследующие в репозитории, то есть если найти какой-нибудь Дотнета в репозитории Microsoft, то ну, сарянка, конечно тут не просто как в инфайле, но нужно диапазонстрочек с нужным осетьrollies в М Dianeport, еще раз так он на самом деле собирается довольно забавно, потому что он это некоторый набор с криптов
pipeline, который работает и источником этой информации является на самом деле набор daily, ну и некоторых нoghet-пакетов. Именно сканируете daily, сайт Microsoft, ну докуменератор документации, понимает какие вообще опишки нужно включить документацию. Дальше есть отдельный вопрос, где-то там есть более подробное описание, где-то менее подробное
описание, но в целом как бы начинаем мы с daily. И дальше надо сделать всего лишь простую штуку, то есть нам нужно всего лишь взяв daily, поняв какие в нем есть функции, понятия, как бы где же исходники от этой daily, где мало того, где их идники не только в момент сборки daily, но где эти исходники искать не китхабе, ну и потом как это все слепить вместе. И по факту, по факту то, что нужно сделать очень похожа, довольно сильно совпадает с тем,
как ведет себя функциональ, под названием go to definition в студии, ну или где угодно. То есть по факту, когда вы нахохстаете на какой-то функции, и жмите на ней, горячую клавиш, либо выбирайте в меню go to definition, по большому счет это тоже самое, как если бы вы читаете
документацию на эту функцию, хотите перейти к ее исходникам. В общем-то примерно похожая задачка, вот и поскольку для решения задачки go to definition, с какой-то момент была реализована технология source link, то как раз таки именно она довольно неплохо подходит и для
решения задачей, как бы нам сделать ссылки из документации в код. Значит, что такое source link, и вообще как оно, когда-то мы принимаем немножко рассказывали, когда он видимо так появился, где-то какие-то на всех светился, но кратенько напомню, значит, что же такое source link,
то есть source link это что-то, который можно включить в этот насправивте в момент сборки, и в этом случае помимо стандартной под обешны в под обешке, где лежат, собственно, из отладочной символы и некоторые соотношения, грубо говоря, диапазонов исходного кода с какой-то
отладочной информацией, или кодом и так далее, так чтобы можно было сделать мапик обратно из кодов символы, но с дотнете символами попроще, у нас есть методальный, который почти все содержит и так, и без под обешек, но тем не менее, некоторые с помогательной базы данные, грубо говоря, для отладки
но кроме этого, при включении source link генерится еще некоторый специальный мапинг из того из имен локальных файлов, причем относительно в обучии, да, относительно корня салеша на грубо говоря, до абсолютных урлов в репетиторе, каком-то из которого это все собиралось в момент сборки, то есть если вы собрали что-то и это было на гидхабе, то с этой с source link должен указывать на гидхаб, но надо понять, а как собственно этот самый, как теперь собрать эту уникальную ссылку для каждого
типа или мембер этого типа в длельки, то есть что-то у нас есть длель, там есть какая-то обин, для которую у нас есть документация, внутри у нас есть какой-то там source link информация, то есть мапинг из имен файлов в какие-то ссылки в каком-то гидхабе например, как из этого собрать ссылку на
конкретный место конкретного файла для конкретного методапи, что делается, но для начала мы уже сегодня упоминали бюбятечку system reflection методата, вот она используется для того чтобы обойти все типы мемберы в этой длельке и поискать информацию, которая помечена специальным,
которая содержится в специальной табличке метод debug information в этом pdb самм методонных, и все в этой месте позволит построить нам ссылочки, что делается, ну для начала нужно понять кори, начало ссылки, то есть это грубо говоря, это сам репизиторий основной плюс в репизиторе,
обычно выбирается либо ветка, либо в большинстве случаев выбирается не конкретная ветка, потому что нужно же точная информация, да, из какой из чего собирался, поэтому выбирается прям конкретность на бюбятки, и вот эта базовая информация, она есть в соштлинского информации,
откуда взята, ну, соответственно, обычно она выглядит что-то в духе, git.hub.com, там сложная, слышно, слышно, слышно, слышно, слышно, айдичник, комита, это как бы прям уникальный, вот ссылка, абсолютно blood, вообще, так вот zuräдно, boxing.тс, вам chrom았어요, какиеordonцы,
там уже тоже надо откроться, так ты подрeles qualify и возвращаются в игрокaver mentality, специальные к вере параметра это решетка l что-нибудь да терретам решетка террелль что-нибудь другой и тут мы снова смотрим в табличку метод дебак информацион и там написано штука под
названием sequence points и это даны которые майпят по сути набор или инструкции в методе обратно к исходникам в коде ну и собственно чем мы с этим делать теперь ну из-за с этим как бы нужно нам сделать следующие как бы эта общая информация про то что хранится по сути в этом фале
когда что хранится в pdb в суршлинке то есть мы технически знаю где у нас находится этот метод в дырельке да как какой или ему соответствует можем найти тебе в каком репеторе в каком фале и какие какой конкретные строчки в этом фале соответствует этому методу но это все здорово но теперь
нам нужно понять вот у нас есть дырельки она нужно собрать из этого сайт документации что будем делать но первое на первое нам нужно понять откуда взять пдb и тут тоже есть несколько вариантов вариант первый если вы собирали ваш код или нет конкретно собирался с опции дебак
type imbedded csprj то в таком случае пдb же будет прям заимбежено в дырельку в виде ресурсом это простой случай вот пдb прям лежит внутри но это раздувает размер файла и понятно что дотнет с таким по-моему не собирает дальше пдb же можно же прям рядом с дырельки прям вот в той же
территории тоже легко найдется обычно тоже не вариант ну и для дотнет естественно используется Microsoft symbol server побличный симпел сервер где можно найти все пдb же для официальных собранных дырельек похоже на нoget то есть если вы с нogет забираете пакет этого можете сходить на точече
такой же сервер и достать от пдb же да да да туда публикуется официально все официально собраны тут на это с дырель и поэтому понятно что если вы собрали тут на это с дырель на него основе собираете сайт документации то пдb же будут на симпел сервери может быть не на официальном
публике если вы собирает еще в заранее а на каком-нибудь внутреннего пробежа то есть нog где-то они будут дальше интереснее пдb же кто мы нашли а вот дальше есть еще пункт под названием funding the del file казалось бы ну а в чем проблем это как бы дырельки то вот они же
селижат но на самом деле для некоторых дырельек нужно очень покреативить пункт пер даже не совсем про дырельки дырельки то не лежат но для некоторых дырельки нужно прям очень каративная работка во первых некоторые дырельки есть только виде рефранса симпли то есть это
специальные такие режим сборки но с ней специальные сборки которые умеют генерить компилятор которые содержат только грубо говоря паблик информацию о типе то есть все паблик там поля то есть все что может вам потребоваться знать для того чтобы поиспользовать такие классы или
такие методы имеем двери все что угодно из других сборок но без собственно реализации потому что ну обычно тела реализации для такого не нужно это нужно для фазок имперации и так далее так вот для таких референсных сборок у них нету под оба шаг вот тут как раз приходится
выпендриваться и для если мы знаем что у нас есть какая-то такая референз сборка мы специально загружаем специальный рантайм пекадж то есть у нас понятно такие сборки обычно используются если мы например собираем относительно шею рантайма то вам не нужно такую сборку
тощить свою сборку она будет в рантайме вам нужно только на этапе компиляции митереференса если чтобы знать какие типы там есть больше ничего не нужно сама сборка она будет в рантайм пекаджи у вас установлен там где вы забыкаетесь так вот в момент сборки нам нужно сходить тогда
скачать это рантайм пекадж и найти там такую же нужно сборку который соответствует вашей референз недалельки и из нее уже вот все то проделывать под оба шаг и так мы искать суршлинки а второе у нас есть генерация сурсов в момент сборки и вот тут совсем плохо потому что ну как бы
а как вот тут сложнее тут мы понятно что не можем никуда сослаться ну у нас просто нет у никаких гитхабовских дошненьках какой-то гитхабовский кот есть который собственно занимается генерацией этих сурсов мы технически можем на него сделать ссылку но я так понимаю особо
таким сейчас не делают не занимаются то есть но это поинтелучение в будущем то есть что-то делается сурсами который генерятся в момент сборки и сурсы в этом смысле тогда им бедится внутрь под оба шаг прямо и на них нет никакой внешней ссылки надо думать команда
пока думать что с этим делать ну как только у нас найден такие дырельки под оба шаги все это вместе можно сложить тогда с видиную конструкцию ну и в итоге генерить один большой JSON-файлик который комитется уже в репозитории где лежат доки сайдя а там уже при сборке сайд у вас
получится нормально собрать со всеми линками есть проблемы с этим подходом например есть типы для которых не генерится ничего в под оба например таким типами является енумы вот потому что ну вот енумы не нужны в под оба шаг почему-то не изучал почему ну почему-то нет интерфейсов
там тоже нет вот для того чтобы войки эту проблему и такие мить возможности в под оба сложить какую какую-то рефер инстанту где эти думаю определены добавили специальный тип который добавляется в табличку custom debug information в под оба шага чтобы потом иметь возможность на
момент генерации методанных так и добыть дети и думать располагались в исходном коде и добыть ссылки на них но дальше есть проблема что в некоторых дырельках они не уточняют в каких момент сборке эта инфа все равно тремится и поэтому даже если не знаю то что ее добавили в
момент сборки под оба шага все равно она туда удаляется короче пока не лишенная проблема и второй момент если у вас есть класс и в нем есть ряд меймеров у которого нету тела ну например абстрактный метод класс базовым да то в этом случае у него не будет то есть самый секунд
спонт информации то есть строчек потому что кодата у метода нет у никакого в под обе шке у него нет у соответствующего кусочка или кода это только запись методанных и в таких случаях как бы некуда ставить ссылку для абстрактных методов таким образом ссылка из документации ведет просто над
файл цвиком мы не знаем в каком месте файлы находится ваш метод он на файл мы вам укажем а дальше уже щитя по имени кроме говоря контролеву прямо на настройки гитхаби но в общем вот и есть еще фича на которой они думают что может быть это все-таки
замодифицируйте сейчас это все делается по сути такими полук остыляеме вокруг использования существующих технологий видосорс линк и под оба шок а возможно все-таки они не как-то замодифицируют рослин так чтобы рослин просто имитил дополнительный мапинг в момент сборки
типа в момент сборки всех типов он будет знать про енумы и про абстрактные методы и про все остальное и сможет корректно выдать все номера строчек со всеми нужными файликами уже этот JSON файл например положите в варья по с доками в общем будем посмотреть но сама по себе фича
кашкрута я тут попользовался это прям очень удобно просто экономить время реально не то чтобы сильно часто приходится это делать смысле относительно общего чтения документации но в целом бывает полезно и действительно кажется что у них же есть в руках сам рослину которая все
эта информация есть вот берись делай по человеческой но нет с маленькой так за кастыликами пошли за кастыликами ну видимо хотели выкатить параньше молодцы выкатили ну теперь спокойненько можно сделать нормальный через рухи да ли как прус сделали в принципе не доказали что это
мегафич всем нужна все хотят в общем теперь можно может и почелл again сделать да ну что мы уже опять приближаемся 2 часа давай завершать со стороны местотями у нас есть еще кратенька раздам тут тоже немало давай по ним пробежим все так давай побысь с мико-мотакта я хотел сказать что вышел микрософт вижел студия код экстендшен для дотнет мови то есть теперь он был привью да теперь вышел в генерал в лабилете что это такое специальный экстендшен как не студен догадаться довежел судя код
который помогает вам делать вот эти вот прекрасные к самолеви интерфейсики он основан на сишарб девки та девки те это значит что вы получаете все что нужно нормальму сишарбут с алюшен сишарбин талисенс и тап тесты и прочее прочее что делает этот экстендшен он добавляет к этому
прекрасному списку еще к самолин талисенс и к самолхот релот то есть прям с первым в лабилетик хот релот дает это прекрасно так еще вышла серия статейчик для уновлоги сика который позволяет вам заменить не то чтобы заменить немножко делать конкуренцию с спаэр в общем они хайпанули на
этапе которые мы как раз обсуждали в предыдущих выпусках статьи так и называется персистинт лок для ваших для вашего спаэр даже борда то есть и шпайр даже борт прекрасен всем он проводит локе трейс и метрики вообще красавицы все такое но его и большая мина заключается в том что эти данные
не перестенсят то есть как только вы перезагрузили свое приложение все ваши логи все ваши метрики потерялись обытно обычно это все-таки не очень удобно и вот авторы подсуете или си говорят у нас есть си к си к умеет не только не просто сохранять все ваши данные а еще там
на вешать всякие ретержен полисти красивые которые помогают эти данные вовремя чистить у него есть еще и свои фишки танк аналитические к вирии даже борды а лерты очень удобные поиск по логам и так далее то есть он он реально крут поэтому они немножко вот в этом хайпер решили
вписаться что же они сделали во-первых они научились вписать в сик все то что вы дает все то что вы дает эспайр даже борт но то есть специальный метр шерине который перехватывает весь опыт телебетерепоток который есть детцы лайтов во всик для этого достаточно там этот экспортер ту сик
метод вызвать и все и все хорошо второй топ они сделали эспар компонент который называется эспайр точка си к вы теперь можете добавить этот пакет к себе в салюшин и сделать бюлдер эд си к и после этого вместе со всем эспайром исти со всемоводажбордом он будет в докер контейнере подымать
рядом си к и писать не то же самое что и в эспайр даже борт после как и дэспар даже борт закрыли все в сике вас по-прежнему будет персистится храниться визуализироваться и так далее в общем тоже прекрасно вещи пока единственное минус в том что сик поддерживает логи и
дистрибит от трейсинки на к сожалению не поддерживает метрики в сайте пока будет спожить я думаю что ребята вот на это гайпи должны метрики тоже добавить почему и нет и так же микрософт на билде 24 анонсировал официальную поддержку open ei библиотеки для dotnet что там из интересного она
поддерживает абсолютно весь спектр и я и всю платформу это jpt4o это стременка компоненты это экстрешабили те специальные также там есть и пи для доступа к доли то есть можно генеристи и мг есть и пи для распознавания аудиопотоков с помощью виспера есть и пи для асистанца в общем
но действительно кажется что абсолютно все засунули что там есть но этот пакет все еще находится в бете сейчас уже достаточно на данный момент доступна б это 4-то нэ думаю скоро зарелизит после такого громкого анонса нужно понимать что есть альтернативы есть биталга
опын и пи и есть опын опын и а и dotnet в общем две библиотеки когда уже давно развиваются в хорошем состоянии поэтому может быть они имеют чуть больше функциональности и стабильности чем официальный пакет но я думаю что в любом случае официальный пакет их скоро догонит
угу здорово у меня тоже некоторые количество тулов или библиотек которые пробежали в ее меня это серелок 4.0 релиз и я не помню отсуждали мы его или нет что то у меня как-то он с глингах лежал отдельно а так что добавим сюда если вы пользует серелогом
обдаитесь прошло релиз было в ноябре 23 полгода больше даже так что наверное там прям майже версера майже рвершен обдейт это прям важный и здорово хотя всего две больших фичи заявлены это батчинг сапорт для синков то есть у вас есть синки которые требует батчинг
теперь это прям билтин сапорт и экспериментал фича под названием dotname capturing то есть если вы внутри ваших строк лагирования указываете не просто название да ваших параметров а можно терринозвание указывать через точку они также через точку будут капчериться
в крочев серелоговские сообщения других каких-то прямо нововведений не знаю почему вдруг 4.0 может там кстати дробно или какие-то старые самые франворки торги ты на просмотреть не смотрел а может просто в ноябре лезни было поэтому пусть будет 4.0 красиво вторая тут за не
слула библиотека это тмдс точка ss ss это dot net ss ss к лайн файбрали то есть клиентский библиотека которая позволяет вам работать на современном тут найти с ss ss подключаться там файлики капирует директори создавать чего угодно плюс имеет поддержку sftp
то есть там есть встроенный sftp к лайн если вам вдруг надо работать с sftp тоже посмотрите и плюс она автоматически подтягивает все ваши опын засажка на фиге всякие приватные ключики но он хасты короче все как надо по отзывам из того что я видел народ пишет типа wow где вы были много лет назад короче давно ждали вот это все в общем если работать нужно вдруг зачем
работать с ss ss. net кажется что это очень хорошая гандидата торта вы проверить как оно и последняя новость это тул под названием dnvm это наверное штука которая я до ну давайте так это аналог популярных толзов из всяких других изговых миров то есть если мы говорим про
java там есть sdkmen который позволяет вам ставить всякие разные sdk от разных rc java если мы говорим про петон там есть какой-нибудь там по n или кто-нибудь такой в таком духе если мы говорим про dn.net то у нас как-то ну у нас есть dn.net да к наш
комод-line tool у которой есть волшебная команда минус минус лист дефис издказ который покажет вам все издка которые установлен но по сути у вас нет возможности взять и поставить там хочу поставить 6 дк 8 издка либо это делать с резцами приционные системы ну или пакетного менеджера который остает чоколоты или там брю если вы на макле или еще очень в таком духе либо руками в качестве сайта вот этот тул это попытка сделать такой
тулинг но для дн.н. то есть не может сказать там инсталч там 8 инсталч с 6 и он сам все поставит как надо везде там чуть-чуть пропишет пока все это на очень защитащен стадии но в принципе идея интересная если вам по какой-то причине требуется жанглировать с дкатом
и не знаю привью часто ставить и потом удаляете потом снова ставить и может это нормальный вариант на попробовать действительно как-то по проще сработать скучей с дк дотнета ну да я вот думал я не пробовал я сейчас на маке сберю в принципе оно плюс-минус
работает но у меня нет необходимости часто менять с дк поставил там 8 сейчас ну как бы и живем надеи все вот у меня есть там 6 и 8 сейчас стоят больше вроде особый не надо поэтому наверное это все-таки больше длинтузиастов которые туда сюда все это дляняют на всякие
привью пробуют такие дела на этом наверное все кажется что у нас ну не то что нас закончились статьи у нас закончились запланированы на сегодня статьи и так уже два часа почти 7 поэтому дотнодевять привью 5 успели посмотреть жил студию привью 2 посмотрели узнали как нам
правильно собирать консистент на билды чтобы были все последние патчи но при этом вы не затянули случайно лишние новые фичи посмотрели на мнение nd около например правильно реконструкторов подумали вместе с парком симоном атом надо использовать нейчерл ки из для ваших сущностей в базе данных узнали как теперь в опишных документации генерятся ссылки прямо на исходе кидут на это но и кратенько смотрели про разные бюблетики тузы которые стали нам доступны или про которых мы просто
почему-то не знали или они обновились на этом все да всем счастливо до новых встреч шарик колокольчики бустики в общем все знаете всем комментарии у побольше пишите да все пока все пока