До конференции DotNext 2024 осталась всего пара недель, и уже хорошо известно обо всех докладах, которые там будут. Все они делятся на четыре основных категории:
Best practices: скажем, «Как собирать проекты просто» или «Как использовать АОП в .NET»
Архитектура: например, про DDD или Serverless
Internals: как в .NET всё устроено «под капотом»
«Расширяем горизонты»: всё, что не подходит предыдущим категориям, но тоже полезно дотнетчикам. Например, знали ли вы, что «монады есть у нас дома», то есть в .NET есть аналог этой концепции?
Темы бывают и фундаментальными, вроде «Асинхронность за пределами async/await», и экзотическими, вроде «.NET для чайников» (ну то есть физических чайников с кухни). И вишенкой на всём этом — выступление о саморазвитии от Максима Дорофеева, который хорошо известен многим разработчикам своими материалами о продуктивности.
В этом посте — описания сразу всех докладов, разделённые на эти четыре блока:
Best practices
Александр Гольдебаев
Несмотря на множество инструментов, доступных для создания cloud-native приложений, создавать такие приложения все еще слишком сложно. Разработчики отвлекаются от написания бизнес-логики, чтобы справиться со сложностью облачной разработки. Чтобы помочь разработчикам упростить создание облачных приложений, и появился .NET Aspire.
В докладе рассмотрим «готовый к работе в облаке стек для создания наблюдаемых, распределенных, production-ready приложений». Разберемся, упростит ли .NET Aspire разработку и отладку cloud-native приложений или будет просто еще одним слоем абстракции — который не только не оградит в полной мере от более низких слоев, но и добавит сложности в и без того непростую разработку облачных приложений.
Внедрение и эффективное использование фича-флагов в ASP.NET-приложении
Михаил Руковишников
Т-Банк
В ходе работы над любым проектом иногда возникает необходимость включать и выключать определенную функциональность без перезапуска приложения. Это может касаться новой фичи, которую хотелось бы в случае чего быстро откатить на проде, или валидаций, усложняющих тестирование на QA-контуре.
Для решения этой задачи можно использовать фича-флаги — конфигурируемые переключатели того или иного куска кода. Они также могут быть полезны для эффективной разработки по TBD, проведения канареечных релизов и A/B-тестов. Обо всем этом и поговорим.
Спикер расскажет о способах внедрения фича-флагов в своем проекте, поделится опытом использования, покажет паттерны применения и даст рекомендации по работе с ними.
Как делать разработчикам больно с помощью даты и времени
Александр Кузнецов
Контур
Почти любое приложение в той или иной форме оперирует датой и временем. Мы можем писать логи, генерировать отчеты, планировать задачи, отправлять сообщения — работа с датой и временем будет присутствовать везде. Где-то явно, а где-то нет.
В докладе собраны типовые особенности и проблемы, с которыми приходится сталкиваться при такой работе, а также рассматриваются возможные варианты их решения на примере технологии .NET.
Опыт миграции c .NET Framework (Windows) на .NET Core (кроссплатформенная технология)
Сергей Пилкин
ЭРЕМЕКС
Исходное приложение — САПР Delta Design 3.7: Windows, desktop, .NET Framework 4.7.2, DirectX/Direct2D, WCF, Windows Forms, UI-библиотека DevExpress.
Результат проекта миграции — САПР Delta Design 4.0: кроссплатформенное приложение (Windows/Linux), .NET 6, Skia (OpenGL), Vulkan, gRPC, Avalonia, библиотека EMXControls!.
Доклад для программистов C#, использующих .NET-технологии для разработки desktop-приложений. Будет особенно полезно тем, кто решает аналогичную проблему миграции с Windows на Linux.
C#/CI/CD, или Как собирать проекты просто
Николай Пьяников
Часто CI/CD-решения сильно зависят от выбранного сервера сборки (GitLab, TeamCity и т.д.), от выбранной платформы сборки (Linux/Windows) и соответствующих скриптов для автоматизации сценариев сборки. Эти скрипты разрастаются и становятся дорогими в поддержке и сложными для изменений.
.NET-разработчикам может не хватать экспертности для работы с этими скриптами.
Николай расскажет, как значительно упростить CI/CD даже для самых сложных сценариев; минимизировать стоимость поддержки, особенно если этим занимаются сами .NET-разработчики; сделать CI/CD независимым от выбранного сервера сборки и платформы. Поделится реальным опытом использования.
Не EF Core единым: альтернативная ORM LINQ to DB и операции изменения данных
Алексей Фадеев
Sibedge
Год назад Алексей рассказывал (YT, VK)про запросы на получение данных – здесь библиотека LINQ to DB дает почти неограниченные возможности. Этот доклад — об операциях модификации данных. LINQ to DB позволяет выполнять запросы UPDATE + JOIN, поддерживает оператор MERGE (добавление, изменение, удаление в одну команду), имеет механизм скоростной вставки больших объемов данных.
Он расскажет про проект linq2db.EntityFrameworkCore – решение для тех, кто не хочет уходить с EF Core и при этом получить возможности LINQ to DB. Поделится опытом внедрения LINQ to DB в крупный проект.
Алексей Галлямов
билайн
Как разработать собственный эффективный, быстрый, защищенный и отказоустойчивый BFF (Backend for Frontend), реализующий API Gateway для микросервисов, используя технологию YARP. Решение полностью перекрывает ранее популярную библиотеку Ocelot.
Доклад будет интересен бэкенд-разработчикам, работающим в микросервисной архитектуре. Затрагивает множество вопросов по вариантам использования YARP, некоторые трюки и подводные камни.
Дмитрий Егоров
Artsofte
Аспектно-ориентированное программирование (АОП) — широко распространенная практика во многих популярных фреймворках, таких как Angular или Spring. В ASP.NET привычно используют этот архитектурный подход при работе с контроллерами, что натолкнуло на мысль масштабировать АОП на другие слои приложений.
Благодаря подходу АОП есть возможность декларативно управлять поведением кода и инкапсулировать сквозную функциональность, не засоряя основную логику бизнес-кейсов. В .NET существует как минимум четыре механизма для реализации АОП: классические объектно-ориентированные декораторы, посткомпиляция, динамические прокси, а также новая технология Interseptor в C# 12.
Дмитрий расскажет об опыте использования каждого из этих механизмов АОП, их преимуществах, ограничениях и особенностях. Кроме того, затронет вопрос перехвата зависимостей из контейнера внедрения зависимостей (DI) для реализации внутренних механизмов АОП с целью обеспечения гибкости и расширяемости кода.
Confluent Kafka: любовь и ненависть в .NET
Алёна Мельник
билайн
Поговорим о том, с какими проблемами можно столкнуться при использовании Confluent Kafka .NET и как их решать. Чего не хватает в .NET-реализации библиотеки и как с этим жить. Как сделать Kafka удобным инструментом, не возненавидев все, что с ней связано.
Разберемся с настройками консьюмеров: как предотвратить потерю событий и читать из ближайшей синхронизированной реплики.
Узнаем, почему ребалансировка в Kafka — это не корень зла, а полезный инструмент.
Какими бывают механизмы аутентификации и их подводные камни. Что такое многоуровневые хранилища и чем они могут быть полезны.
Сергей Бензенко
KiraSoft
Новые версии .NET уже несколько лет выходят каждый год. Бывает сложно уследить за всеми новинками и тем, когда они были представлены. Текущая версия .NET — восьмая, так называемая Long Term Support, то есть поддерживается три года (как и все четные LTS-версии), до ноября 2026 года. Девятая версия .NET, которая выйдет в ноябре этого года, будет Standard Term Support версией и будет поддерживаться год-полтора. В докладе Сергей рассмотрит, каким видит Microsoft будущее .NET и что нового появится в .NET 9. В частности, расскажет о новинках в языке C#, в ASP.NET, Entity Framework и MAUI.
Архитектура
Building Multi-Tenant ASP.NET Core Applications and ABP Framework
Alper Ebiçoğlu
Volosoft
«Multitenancy» («множественная аренда») — архитектурный подход, при котором экземпляр приложения обслуживает множество организаций-клиентов («арендаторов»).
Создание подобных веб-приложений требует опыта. Альпер Эбичолу — один из авторов фреймворка для разработки веб-приложений, в том числе и «мультиарендных». Он расскажет о создании подобного веб-приложения поверх ASP.NET Core.
DDD и стратегическое проектирование
Александр Химушкин
АСЭ
Как в атомной промышленности можно использовать стратегические паттерны из DDD.
Александр расскажет про использование единого языка и его влияние на продукт и стейкхолдеров. Обсудим:
Почему без ограниченных контекстов и доменных областей единый язык не имеет смысла.
Что такое смысловое ядро и как его выявить, чтобы развивать и предоставить продукт различным заказчикам АЭС.
Кому и как задавать вопросы для получения удачной архитектуры, понятной всем участникам процесса разработки продукта.
Он поделится мыслями о том, почему стратегический подход к развитию продукта важен и как он помогает снизить напряженность между разработчиками и менеджерами продукта.
OAuth 2.0 User-Managed Access в ASP.NET Core с Keycloak
Роман Просин
Райффайзен Банк
Роман уже выступал на DotNext по теме аутентификации и авторизации на DotNext вместе с коллегами.
А теперь в одиночку закроет эту тему. В этот раз он поделится опытом и подробнее расскажет об авторизации на основе ресурсов (ASP.NET Core resource-based access control) и в частности об авторизации, управляемой пользователями в приложениях на платформе ASP.NET Core, использующих Keycloak в качестве службы токенов безопасности (Security Token Service — STS) и UMA-compliant Keycloak Protection API.
Встроенная в Keycloak реализация профиля OAuth 2.0 User-Managed Access (UMA, profile of OAuth 2.0).
Implementing Domain-Driven Design as a Pragmatic Developer
Halil İbrahim Kalkan
Volosoft
Предметно-ориентированное проектирование (domain-driven design, DDD) — один из признанных подходов к построению большой системы с поддерживаемой кодовой базой. В нем содержатся стратегические и тактические паттерны для разработки ПО. Цель доклада — рассказать о тактических паттернах с прагматической точки зрения и объяснить, как разложить ПО на разные уровни, внедрить на практике паттерн aggregates, репозитории, доменные службы, службы приложений и другие основные необходимые для создания приложений блоки. Все будет показано на реальных примерах, вы узнаете четкие правила работы.
Структура решения и примеры кода основаны на .NET и C#. Однако доклад будет полезен разработчикам и архитекторам, работающим с любой серверной технологией.
Outbox: сложно о, казалось бы, простом
Борис Кузоваткин
Ex-Ozon
Outbox — известный архитектурный паттерн, о котором написано множество статей, рассказано в докладах и даже написаны книги.
В этот раз обсудим, с какими неожиданными проблемами сталкиваются разработчики при больших нагрузках и как не выстрелить себе в ногу.
Eще не перешли в serverless? Тогда мы идем к вам!
Игорь Федченко
Системы на микросервисной архитектуре можно запускать на «голых» виртуалках, можно в Docker-контейнерах. А можно на serverless.
Кто-то относится к serverless-функциям как к игрушке для создания ботов или мелких pet-проектов. На .NET-конференциях не так часто освещают тему serverless и редко говорят о построении крупных систем из десятков микросервисов, обслуживающих десятки тысяч активных пользователей.
В докладе Игорь намерен это исправить. Поговорим о том, как работает serverless, какие проблемы возникают и как их решать. И о главном — как строить масштабируемые, экономичные и прозрачные системы, не утонув в инфраструктуре.
Azure Data Explorer как основная база данных для приложения
Артем Манченков
Microsoft
Azure Data Explorer (ранее Kusto) — аналитическая система для работы с Big Data. Но что, если мы возьмем ее вместо привычных SQL Server / MongoDB и прочих баз данных? В докладе будет рассмотрен опыт внедрения ADX в качестве основной и единственной базы данных для небольшого веб-приложения.
Фрактальная геометрия в проектировании систем
Влад Хононов
DoiT International
Город, компания, организм — все это системы со схожим внутренним устройством: все они нуждаются в сети доставки энергии до всех своих частей. Энергия может быть в форме калорий, воды, кислорода, электричества или любой другой, без которой система не может существовать. Даже небольшой сбой доставки может разрушить всю систему.
Информационные системы работают аналогично — они тоже требуют эффективного распределения энергии. И энергия в данном случае — это знания. Из доклада вы узнаете, как знания распространяются и доставляются к различным компонентам информационной системы, в чем заключается сложность этого процесса и как можно оптимизировать распределение знаний для проектирования модульных и гибких программных решений.
Артём Акуляков
CallCTO
CQRS довольно популярный архитектурный стиль, что, помимо прочего, формирует ряд мифов. Один из них: CQRS — это best practice, некая архитектурная серебряная пуля. Второй миф крайне вредный: что якобы существует эталонная реализация CQRS, а все остальное неправильно и вообще не CQRS.
В докладе максимально прагматично обсудим CQRS: когда применять, когда нет, каковы минусы, какие задачи решаем. Рассмотрим различные варианты реализации. Поговорим про типовые проблемы и обсудим, как с ними справляться.
Internals
Асинхронность: не только async/await
Евгений Пешков
С появления async/await прошло много времени. Часть языков, например JavaScript и Kotlin, переняли этот паттерн почти без изменений, другие же — Java, Go — предлагают свои подходы к асинхронности. У разработчиков .NET тоже возникли сомнения в будущем async/await: появились эксперименты с green threads и оптимизациями нынешней модели асинхронности.
В докладе Евгений расскажет о разнице в реализациях асинхронности, проблемах с производительностью и о том, как может измениться async/await в .NET.
Плагины к сервисам: безопасное расширение функциональности
Станислав Сидристый
Рассмотрим возможность расширения функциональности сервисов при помощи AssemblyLoadContext. Предлагаемая модель расширения плагинами будет уметь производить: горячую подмену реализации во время исполнения, разделение DI-контейнеров между плагинами и хостом, отладку, учитывать особенности разработки Dockerfile под них и множество других нюансов.
Методы повышения производительности .NET-приложения на примере программы поиска дубликатов
Юрий Малич
NP4 GmbH
В этом олдскульном докладе о производительности Юрий поделится опытом её повышения у .NET-приложения и приемами, которые использовал при разработке и оптимизации своей программы для Windows. Речь пойдёт о:
алгоритмических оптимизациях при поиске дубликатов;
низкоуровневых оптимизациях сравнения данных в памяти (с примерами дизассемблерного кода);
выборе оптимального алгоритма хэширования;
оптимизациях чтения данных с SSD- и HDD-дисков в несколько потоков;
методах повышения эффективности использования памяти и снижения нагрузки на GC;
жестких ссылках и симлинках в NTFS.
Как приручить XDocument? XmlDocument vs XDocument
Кирилл Пронин
PIX Robotics
Как часто вы задумываетесь о выборе правильного типа данных в своей будущей разработке? Следите ли вы за последними изменениями в работе с XML-документами?
В докладе Кирилл расскажет о проблеме, с которой он столкнулся в рамках работы по импортозамещению обработчика табличных редакторов офисных приложений в Linux-подобных операционных системах.
Проблематика проста — в короткие сроки разработать код, который умеет работать со всеми файлами Linux-аналогов Excel. И хотя каждый табличный редактор — это простейший XML, как разработать одну структуру, которая умеет работать со всеми? Правда ли, что XmlDocument — это старый добрый тип, который всегда актуален и до сих пор силен? Или появились новые типы, о которых просто не говорят так много и повсеместно?
Рассмотрим лучшие и худшие стороны XDocument и XmlDocument на практических примерах. Узнаем о лайфхаках использования и обратимся к бенчмаркам.
Как в C# 11 появилась обобщенная математика
Степан Минин
Независимый консультант
Рассмотрим с нуля концепцию обобщенной математики. Как она выглядит в C# 11, как могла выглядеть в предыдущих версиях языка и почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, в какой продакшен в скором времени заделиверится эта фича.
Native AOT. Возможности и ограничения
Андрей Порожняков
SKAI
Иногда .NET-приложения запускаются дольше, чем нужно. Это связано с особенностями JIT-компиляции — при каждом старте IL-код компилируется в машинные инструкции. Проблема становится заметной, когда приложения запускаются часто, например, при реализации FaaS.
Решением может стать ahead-of-time, или AOT-компиляция. Это одна из функций, над которой сейчас работает группа ASP.NET Microsoft. Она генерирует машинные инструкции на этапе сборки приложения, и можно обойтись без IL-кода. Но такой подход предъявляет ряд требований к приложению и разработке.
Андрей расскажет, как ускорить запуск приложения за счет AOT-компиляции. Рассмотрим требования и ограничения публикации Native AOT. Отдельно он скажет о поддержке Minimal API и генераторов исходного кода, о плюсах, минусах и практической пользе технологии.
Расширяем горизонты
Обучение взрослых людей, или Что мы неправильно понимаем в саморазвитии
Максим Дорофеев
Максима Дорофеева многие знают по его выступлениям о продуктивности и прокрастинации, а в этот раз он поговорит о саморазвитии.
На взгляд автора доклада, самой страшной проблемой в обучении взрослых людей является отождествление этого процесса с поглощением контента. В результате вместо того, чтобы заниматься саморазвитием, мы пытаемся как можно больше:
прочесть книг;
изучить статей;
пройти курсов.
Хотя… Кого мы обманываем? На самом деле все сводится к тому, чтобы как можно больше:
купить книг (большинство из которых мы даже не откроем);
открыть вкладок со статьями (которые будут путаться под курсором мыши);
скачать видеозаписей курсов (для которых потребуется купить новый жесткий диск).
В итоге сквозь чувство вины пробивается вопрос: «Где найти на это все время?». Вот об этом и поговорим.
Андрей Цветцих
DevBrothers, Т-Банк
Денис Цветцих
DevBrothers, Т-Банк
Проектирование высоконагруженных и отказоустойчивых систем — это востребованный навык, который сегодня важен не только архитекторам, но и разработчикам. Поэтому многие ведущие российские и зарубежные компании проводят System Design Interview.
В режиме реального времени спроектируем систему, которая будет соответствовать заявленным функциональным требованиям и ожидаемой нагрузке и объемам хранимых данных.
Вам расскажут, как соблюсти гарантии доставки и сделать систему отказоустойчивой, как масштабировать систему при увеличении количества пользователей и объемов данных. Вместе со спикерами вы проверите, не развалится ли архитектура при добавлении новых фич.
Перестаньте оптимизировать C# и займитесь вашей БД
Дмитрий Орлов
Ozon
Перекладывание JSON с клиента в БД и обратно с небольшой бизнес-логикой посередине — реальность, с которой сталкиваются многие. В таких случаях нужны не оптимизации кода или сложные алгоритмы, а правильная работа с хранилищем.
Разберем план запроса Postgres, узнаем, как его читать и на что обращать больше внимания. Изучим ситуации (от понятных до сложных), при которых ваш запрос может тормозить. Узнаем о приемах, которые помогут жить с миллиардами записей даже на слабом железе.
Новые реалии безопасной разработки: ГОСТ Р 71207–2024
Глеб Асламов
PVS-Studio
Поговорим про новый ГОСТ от 1 апреля 2024 года, направленный на безопасную разработку и устанавливающий требования для статических анализаторов и безопасной разработки в целом.
Рассмотрим, как ГОСТ соотносится с реальностью разработки статического анализатора, разберем основные положения и требования. Поговорим о технологиях на примере C# анализатора.
Перестаньте отмазываться от ответственности за свой код
Михаил Кузнецов
Mindbox
В Mindbox 150 человек в R&D, более 1000 B2B-клиентов, выкладка на прод несколько раз в день — и нет выделенных тестировщиков / QA. Это иногда вызывает удивление у соискателей на интервью и вообще. Михаил расскажет, как, почему и кому такой подход может быть полезен.
Александр Бусыгин
Т-Банк
Многих разработчиков удручает, что результаты их труда существуют в виртуальном мире — в виде байтов на жестком диске, букв на экране монитора и т. д. Вместе с Александром будем программировать так, чтобы результаты можно было увидеть и потрогать в реальном мире.
Рассмотрим пример использования .NET nanoFramework для разработки умного устройства. Александр возьмет обыкновенный чайник и сделает его умным.
Оборудование — чайник, контроллер ESP32, датчики, реле. Программная часть — сервис сбора данных и управления чайником, сервис хранения состояний, IHostedService с логикой управления.Спикер зарегистрирует сервисы в DI, поднимет веб-сервер с REST API, покажет интеграцию с Yandex IoT.
Целевая аудитория: опытные разработчики, которые хотят попробовать своими руками сделать умные устройства, но не решаются, потому что сложно / долго / дорого.
Чему научились LLM для разработчиков за эти полтора года и что нам с этого?
Родион Мостовой
Индид
Искусственный интеллект стремительно меняет мир разработки программного обеспечения. Во время доклада мы погрузимся в захватывающий мир языковых моделей (LLM) и их применения в программировании. Начнем с обзора лучших LLM и инструментов для кодинга, как проприетарных, так и с открытым исходным кодом. Затем разберем основные ошибки при использовании этих инструментов и научимся извлекать из них максимальную пользу.
Особое внимание уделят неочевидным, но эффективным способам применения нейросетей в программировании, проиллюстрировав их примерами на C#.
Завершим доклад обсуждением важного вопроса приватности при использовании AI-инструментов в разработке. Вы получите практические советы по защите конфиденциальных данных.
Разработка с использованием искусственного интеллекта
Дмитрий Нестерук
Никто не будет отрицать, что использование ИИ все больше актуально в разработке ПО. Обсудим, как можно использовать языковые модели в анализе требований, написании, тестировании и анализе кода, организации процесса разработки.
Поговорим про смену парадигмы с классической на AI-driven и посмотрим, как можно организовать ИИ-улучшенный процесс разработки сложных систем.
Марк Шевченко
Т1 Холдинг
Вычислительные выражения (computation expressions) — концепция, которая перекочевала в F# из языка Haskell. Там она называется монадами и является одновременно одной из самых интересных тем для программистов и одной из самых непонятных. Большинство программистов .NET не знают, что «монады есть у нас дома», то есть в языке F#.
Доклад будет полезен для общего развития и расширения кругозора. Возможно, он подтолкнет кого-то к более близкому знакомству с F#.
Оптимизация через партицирование
Виталий Сушков
Т-Банк
История об оптимизации сервиса, который перестал справляться со своими обязанностями из-за роста объема обрабатываемых данных.
Вам расскажут о примененных приемах, которые позволили вернуть сервис в нормальное рабочее состояние в моменте и подготовиться к будущему многократному росту нагрузки при минимальной затрате ресурсов.
Особое внимание уделится применению механизма декларативного партицирования таблиц в PostgreSQL: как реализовывали его на большой нагруженной базе без простоя сервиса, какие возникали сложности и как удалось их преодолеть.
На этом все доклады описали — но, конечно, конференция не сводится только к докладам. Наверняка на московской площадке будет происходить много живого общения.
А если до Москвы добраться не готовы, можете приобрести онлайн-билет. Конечно, это не то же самое, что лично приехать — но это тоже позволяет, например, как следует поспрашивать любого спикера после его выступления. Так что это не просто «смотреть видеозаписи докладов».
Вся остальная информация о конференции и билеты — на официальном сайте.