До конференции DotNext 2024 осталась всего пара недель, и уже хорошо известно обо всех докладах, которые там будут. Все они делятся на четыре основных категории:

  • Best practices: скажем, «Как собирать проекты просто» или «Как использовать АОП в .NET»

  • Архитектура: например, про DDD или Serverless

  • Internals: как в .NET всё устроено «под капотом»

  • «Расширяем горизонты»: всё, что не подходит предыдущим категориям, но тоже полезно дотнетчикам. Например, знали ли вы, что «монады есть у нас дома», то есть в .NET есть аналог этой концепции?

Темы бывают и фундаментальными, вроде «Асинхронность за пределами async/await», и экзотическими, вроде «.NET для чайников» (ну то есть физических чайников с кухни). И вишенкой на всём этом — выступление о саморазвитии от Максима Дорофеева, который хорошо известен многим разработчикам своими материалами о продуктивности.

В этом посте — описания сразу всех докладов, разделённые на эти четыре блока:

Best practices

.NET Aspire in Action

Александр Гольдебаев

Несмотря на множество инструментов, доступных для создания 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 в крупный проект.


API Gateway на базе YARP

Алексей Галлямов

билайн

Как разработать собственный эффективный, быстрый, защищенный и отказоустойчивый BFF (Backend for Frontend), реализующий API Gateway для микросервисов, используя технологию YARP. Решение полностью перекрывает ранее популярную библиотеку Ocelot.

Доклад будет интересен бэкенд-разработчикам, работающим в микросервисной архитектуре. Затрагивает множество вопросов по вариантам использования YARP, некоторые трюки и подводные камни.


Использование АОП в .NET

Дмитрий Егоров

Artsofte

Аспектно-ориентированное программирование (АОП) — широко распространенная практика во многих популярных фреймворках, таких как Angular или Spring. В ASP.NET привычно используют этот архитектурный подход при работе с контроллерами, что натолкнуло на мысль масштабировать АОП на другие слои приложений.

Благодаря подходу АОП есть возможность декларативно управлять поведением кода и инкапсулировать сквозную функциональность, не засоряя основную логику бизнес-кейсов. В .NET существует как минимум четыре механизма для реализации АОП: классические объектно-ориентированные декораторы, посткомпиляция, динамические прокси, а также новая технология Interseptor в C# 12.

Дмитрий расскажет об опыте использования каждого из этих механизмов АОП, их преимуществах, ограничениях и особенностях. Кроме того, затронет вопрос перехвата зависимостей из контейнера внедрения зависимостей (DI) для реализации внутренних механизмов АОП с целью обеспечения гибкости и расширяемости кода.


Confluent Kafka: любовь и ненависть в .NET

Алёна Мельник

билайн

Поговорим о том, с какими проблемами можно столкнуться при использовании Confluent Kafka .NET и как их решать. Чего не хватает в .NET-реализации библиотеки и как с этим жить. Как сделать Kafka удобным инструментом, не возненавидев все, что с ней связано.

Разберемся с настройками консьюмеров: как предотвратить потерю событий и читать из ближайшей синхронизированной реплики.

Узнаем, почему ребалансировка в Kafka — это не корень зла, а полезный инструмент.

Какими бывают механизмы аутентификации и их подводные камни. Что такое многоуровневые хранилища и чем они могут быть полезны.


Что нового в .NET 9

Сергей Бензенко

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

Город, компания, организм — все это системы со схожим внутренним устройством: все они нуждаются в сети доставки энергии до всех своих частей. Энергия может быть в форме калорий, воды, кислорода, электричества или любой другой, без которой система не может существовать. Даже небольшой сбой доставки может разрушить всю систему.

Информационные системы работают аналогично — они тоже требуют эффективного распределения энергии. И энергия в данном случае — это знания. Из доклада вы узнаете, как знания распространяются и доставляются к различным компонентам информационной системы, в чем заключается сложность этого процесса и как можно оптимизировать распределение знаний для проектирования модульных и гибких программных решений.


Pragmatic CQRS

Артём Акуляков

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 и генераторов исходного кода, о плюсах, минусах и практической пользе технологии.


Расширяем горизонты

Обучение взрослых людей, или Что мы неправильно понимаем в саморазвитии

Максим Дорофеев

Максима Дорофеева многие знают по его выступлениям о продуктивности и прокрастинации, а в этот раз он поговорит о саморазвитии.

На взгляд автора доклада, самой страшной проблемой в обучении взрослых людей является отождествление этого процесса с поглощением контента. В результате вместо того, чтобы заниматься саморазвитием, мы пытаемся как можно больше:

  • прочесть книг;

  • изучить статей;

  • пройти курсов.

Хотя… Кого мы обманываем? На самом деле все сводится к тому, чтобы как можно больше:

  • купить книг (большинство из которых мы даже не откроем);

  • открыть вкладок со статьями (которые будут путаться под курсором мыши);

  • скачать видеозаписей курсов (для которых потребуется купить новый жесткий диск).

В итоге сквозь чувство вины пробивается вопрос: «Где найти на это все время?». Вот об этом и поговорим.


System Design Interview

Андрей Цветцих

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 для чайников

Александр Бусыгин

Т-Банк

Многих разработчиков удручает, что результаты их труда существуют в виртуальном мире — в виде байтов на жестком диске, букв на экране монитора и т. д. Вместе с Александром будем программировать так, чтобы результаты можно было увидеть и потрогать в реальном мире.

Рассмотрим пример использования .NET nanoFramework для разработки умного устройства. Александр возьмет обыкновенный чайник и сделает его умным.

Оборудование — чайник, контроллер ESP32, датчики, реле. Программная часть — сервис сбора данных и управления чайником, сервис хранения состояний, IHostedService с логикой управления.Спикер зарегистрирует сервисы в DI, поднимет веб-сервер с REST API, покажет интеграцию с Yandex IoT.

Целевая аудитория: опытные разработчики, которые хотят попробовать своими руками сделать умные устройства, но не решаются, потому что сложно / долго / дорого.


Чему научились LLM для разработчиков за эти полтора года и что нам с этого?

Родион Мостовой

Индид

Искусственный интеллект стремительно меняет мир разработки программного обеспечения. Во время доклада мы погрузимся в захватывающий мир языковых моделей (LLM) и их применения в программировании. Начнем с обзора лучших LLM и инструментов для кодинга, как проприетарных, так и с открытым исходным кодом. Затем разберем основные ошибки при использовании этих инструментов и научимся извлекать из них максимальную пользу.

Особое внимание уделят неочевидным, но эффективным способам применения нейросетей в программировании, проиллюстрировав их примерами на C#.

Завершим доклад обсуждением важного вопроса приватности при использовании AI-инструментов в разработке. Вы получите практические советы по защите конфиденциальных данных.


Разработка с использованием искусственного интеллекта

Дмитрий Нестерук

Никто не будет отрицать, что использование ИИ все больше актуально в разработке ПО. Обсудим, как можно использовать языковые модели в анализе требований, написании, тестировании и анализе кода, организации процесса разработки.

Поговорим про смену парадигмы с классической на AI-driven и посмотрим, как можно организовать ИИ-улучшенный процесс разработки сложных систем.


Вычислительные выражения в F#

Марк Шевченко

Т1 Холдинг

Вычислительные выражения (computation expressions) — концепция, которая перекочевала в F# из языка Haskell. Там она называется монадами и является одновременно одной из самых интересных тем для программистов и одной из самых непонятных. Большинство программистов .NET не знают, что «монады есть у нас дома», то есть в языке F#.

Доклад будет полезен для общего развития и расширения кругозора. Возможно, он подтолкнет кого-то к более близкому знакомству с F#.


Оптимизация через партицирование

Виталий Сушков

Т-Банк

История об оптимизации сервиса, который перестал справляться со своими обязанностями из-за роста объема обрабатываемых данных.

Вам расскажут о примененных приемах, которые позволили вернуть сервис в нормальное рабочее состояние в моменте и подготовиться к будущему многократному росту нагрузки при минимальной затрате ресурсов.

Особое внимание уделится применению механизма декларативного партицирования таблиц в PostgreSQL: как реализовывали его на большой нагруженной базе без простоя сервиса, какие возникали сложности и как удалось их преодолеть.


На этом все доклады описали — но, конечно, конференция не сводится только к докладам. Наверняка на московской площадке будет происходить много живого общения.

А если до Москвы добраться не готовы, можете приобрести онлайн-билет. Конечно, это не то же самое, что лично приехать — но это тоже позволяет, например, как следует поспрашивать любого спикера после его выступления. Так что это не просто «смотреть видеозаписи докладов».

Вся остальная информация о конференции и билеты — на официальном сайте.

Комментарии (2)


  1. Proscrito
    28.08.2024 17:53
    +1

    Все выглядит интересным. Смутила только альтернатива EF. EF тоже умеет merge и прочие bulk, и также она умеет update и delete без материализации по произвольному запросу, в т.ч. содержащему join'ы.


    1. phillennium Автор
      28.08.2024 17:53

      Если я правильно понял описание доклада, то Алексей основные преимущества LINQ to DB видит при запросах на получение данных, и этому посвятил предыдущий доклад. А в случае с операциями записи может действительно не быть каких-то суперпреимуществ, но если уж рассказал про чтение, то теперь надо и про запись)