Я больше 6 лет работаю с Clean Architecture — и вот почему она мне реально зашла
Самая большая проблема в энтерпрайз-проектах — бардак в структуре.
Каждый делает по-своему:
> Свои слои, свои подходы, свои велосипеды.
> Знания с проекта на проект не переносятся.
Clean Architecture это чинит.
Это не про количество проектов или навороченные паттерны.
Это про направление зависимостей.
> Внутренние слои (domain, application) описывают абстракции.
> Внешние (infrastructure, UI) — их реализуют.
Никогда наоборот.
Вот и всё. Всё остальное — вариации:
> Классические слои: domain / app / infra / web
> Вертикальные срезы по фичам
> Или компоненты, которые сочетают и то, и другое
Любая схема работает, если держаться этого правила.
Что в итоге получаешь:
✅ Модули, которые легко переиспользовать
✅ Понятное разделение, кто за что отвечает
✅ Логика легко покрывается тестами
✅ Новым людям проще влиться
✅ Компоненты слабо связаны — меньше проблем при изменениях
Clean Architecture реально помогает выпускать продуманный, поддерживаемый код. Я ей продолжаю пользоваться — потому что это просто работает.
👉 @KodBlog
Самая большая проблема в энтерпрайз-проектах — бардак в структуре.
Каждый делает по-своему:
> Свои слои, свои подходы, свои велосипеды.
> Знания с проекта на проект не переносятся.
Clean Architecture это чинит.
Это не про количество проектов или навороченные паттерны.
Это про направление зависимостей.
> Внутренние слои (domain, application) описывают абстракции.
> Внешние (infrastructure, UI) — их реализуют.
Никогда наоборот.
Вот и всё. Всё остальное — вариации:
> Классические слои: domain / app / infra / web
> Вертикальные срезы по фичам
> Или компоненты, которые сочетают и то, и другое
Любая схема работает, если держаться этого правила.
Что в итоге получаешь:
Clean Architecture реально помогает выпускать продуманный, поддерживаемый код. Я ей продолжаю пользоваться — потому что это просто работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥6👍3
Как я импортировал более 5 000 000 записей в базу данных:
(за 89 секунд)
Недавно мне нужно было выполнить большую миграцию данных.
После изучения доступных вариантов я выбрал SQLBulkCopy.
SQLBulkCopy позволяет импортировать большие объёмы данных напрямую в таблицы SQL Server.
Также он поддерживает транзакции — можно откатить весь импорт в случае ошибки.
У меня нет бенчмарков, но в моём случае импорт завершился за 89 секунд💪
P.S. Вы использовали SQLBulkCopy?
👉 @KodBlog
(за 89 секунд)
Недавно мне нужно было выполнить большую миграцию данных.
После изучения доступных вариантов я выбрал SQLBulkCopy.
SQLBulkCopy позволяет импортировать большие объёмы данных напрямую в таблицы SQL Server.
Также он поддерживает транзакции — можно откатить весь импорт в случае ошибки.
У меня нет бенчмарков, но в моём случае импорт завершился за 89 секунд
P.S. Вы использовали SQLBulkCopy?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🤔3🔥1
В .NET 10 снижена «надбавка» за использование
В .NET 9 перебор массива через👏
Что думаете?
👉 @KodBlog
IEnumerable
с 83% до 10%В .NET 9 перебор массива через
IEnumerable
обходился на 83% дороже, чем прямой перебор массива, тогда как в .NET 10 эта разница составила всего 10% Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍14❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Вот топовый инструмент от Microsoft
dotnet/interactive — даёт тебе интерактивные ноутбуки с поддержкой C#, F#, PowerShell, SQL и даже JS в одном файле😮
Можно писать, визуализировать данные, делиться демками и комбинировать языки как угодно.
Работает в Jupyter и VS Code. Подходит для обучения, исследований и просто кайфового кодинга.
Советую заценить — реально мощная штука для .NET-разработчиков
👉 @KodBlog
dotnet/interactive — даёт тебе интерактивные ноутбуки с поддержкой C#, F#, PowerShell, SQL и даже JS в одном файле
Можно писать, визуализировать данные, делиться демками и комбинировать языки как угодно.
Работает в Jupyter и VS Code. Подходит для обучения, исследований и просто кайфового кодинга.
Советую заценить — реально мощная штука для .NET-разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥1
𝗛𝘆𝗯𝗿𝗶𝗱𝗖𝗮𝗰𝗵𝗲 в .𝗡𝗘𝗧 𝟵
В .NET 9 появился новый API для кэширования — HybridCache.
Он решает ограничения
Что он предлагает:
> Единый API (и для in-process, и для out-of-process кэша)
> Настраиваемую сериализацию
> Защиту от «штамповки» (stampede protection)
> Очистку кэша по тегам
Метод
Stampede protection означает: на один ключ — только один вызов фабрики одновременно.
Вот как можно начать использовать HybridCache уже сегодня: read😡
👉 @KodBlog
В .NET 9 появился новый API для кэширования — HybridCache.
Он решает ограничения
IMemoryCache
и IDistributedCache
Что он предлагает:
> Единый API (и для in-process, и для out-of-process кэша)
> Настраиваемую сериализацию
> Защиту от «штамповки» (stampede protection)
> Очистку кэша по тегам
Метод
GetOrCreateAsync
проверяет и основной, и вторичный кэш. Если значения нет — вызывает фабрику, сохраняет результат и возвращает его.Stampede protection означает: на один ключ — только один вызов фабрики одновременно.
Вот как можно начать использовать HybridCache уже сегодня: read
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥3
Игра в кальмара: 5 уроков выживания для .NET-разработчиков
Выживание в мире .NET — это не вопрос удачи.
Это вопрос стратегии.
Точно как в «Игре в кальмара», тут важен каждый выбор.
1. ИГРА «КРАСНЫЙ СВЕТ, ЗЕЛЁНЫЙ СВЕТ»
Врываешься в проект без обдуманной архитектуры?
🔴 Красный свет.
Закладываешь масштабируемый и надёжный фундамент с самого начала?
🟢 Зелёный свет.
Архитектура — твой первый шаг. Не замирай
2. ИГРА «СОТА»
Работа в запутанном коде — как вырезать фигуру из сахарной соты:
одно неловкое движение — и всё трещит по швам.
Пиши чистый, тестируемый код — тогда приложение не развалится под давлением
3. ИГРА «ПЕРЕТЯГИВАНИЕ КАНАТА»
Окружи себя сильными наставниками, коллегами и профессиональными сообществами.
Они помогут вытянуть тебя через самые сложные испытания
4. ИГРА «ШАРИКИ»
Технический долг — как игра в шарики:
кажется, что каждый костыль — мелочь, но они быстро накапливаются.
Если долго их игнорировать — можно проиграть всё.
Грамотное управление долгом удержит тебя в игре.
5. ИГРА «СТЕКЛЯННЫЙ МОСТ»
Учись на чужих ошибках.
Используй проверенные решения и библиотеки.
Не изобретай велосипед
Разработка на .NET — это игра, где важен каждый выбор
Играй с умом😈
👉 @KodBlog
Выживание в мире .NET — это не вопрос удачи.
Это вопрос стратегии.
Точно как в «Игре в кальмара», тут важен каждый выбор.
1. ИГРА «КРАСНЫЙ СВЕТ, ЗЕЛЁНЫЙ СВЕТ»
Врываешься в проект без обдуманной архитектуры?
Закладываешь масштабируемый и надёжный фундамент с самого начала?
Архитектура — твой первый шаг. Не замирай
2. ИГРА «СОТА»
Работа в запутанном коде — как вырезать фигуру из сахарной соты:
одно неловкое движение — и всё трещит по швам.
Пиши чистый, тестируемый код — тогда приложение не развалится под давлением
3. ИГРА «ПЕРЕТЯГИВАНИЕ КАНАТА»
Окружи себя сильными наставниками, коллегами и профессиональными сообществами.
Они помогут вытянуть тебя через самые сложные испытания
4. ИГРА «ШАРИКИ»
Технический долг — как игра в шарики:
кажется, что каждый костыль — мелочь, но они быстро накапливаются.
Если долго их игнорировать — можно проиграть всё.
Грамотное управление долгом удержит тебя в игре.
5. ИГРА «СТЕКЛЯННЫЙ МОСТ»
Учись на чужих ошибках.
Используй проверенные решения и библиотеки.
Не изобретай велосипед
Разработка на .NET — это игра, где важен каждый выбор
Играй с умом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥3
IServiceScopeFactory
vs IServiceProvider
— что использовать для создания пользовательских скоупов?Оба могут создавать скоупы, но ключевой момент в следующем:
IServiceProvider.CreateScope()
просто получает IServiceScopeFactory
и вызывает у него CreateScope()
Так что использование
IServiceScopeFactory
— более прямой подход.Обычно пользовательские скоупы нужны, когда вы работаете с root-провайдером.
Вот решение на практике: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🥴4👍2
This media is not supported in your browser
VIEW IN TELEGRAM
В режиме Ask в VScode ты можешь общаться напрямую с экспертами — так называемыми участниками (participants). Например, участник Remote-SSH может ответить на вопросы о разработке по SSH, помочь с настройкой окружения и даже разобраться с ошибками подключения 🤔
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥1🥴1
Как автоматически регистрировать Minimal API в
Регистрировать Minimal API вручную — работает, но плохо масштабируется.
Хочешь более чистый и автоматизированный подход?
✅ Определи API-модули как static-классы
✅ Используй рефлексию, чтобы найти и зарегистрировать все методы MapEndpoints
✅ Централизуй регистрацию в едином цикле
Преимущества:
> Единая и понятная структура
> Легче разбивать на модули
> Меньше повторяющегося кода
Полный пример с кодом тут: here🤙
👉 @KodBlog
ASP.NET Core
Регистрировать Minimal API вручную — работает, но плохо масштабируется.
Хочешь более чистый и автоматизированный подход?
Преимущества:
> Единая и понятная структура
> Легче разбивать на модули
> Меньше повторяющегося кода
Полный пример с кодом тут: here
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Устал вручную одобрять инструменты в agent mode?
Просто включи параметр
Можно настроить это только для удалённой среды разработки — так ты получаешь удобство и хоть какую-то защиту от потенциально опасных действий.
👉 @KodBlog
Просто включи параметр
chat.tools.autoApprove
, чтобы все инструменты автоматически подтверждались.Можно настроить это только для удалённой среды разработки — так ты получаешь удобство и хоть какую-то защиту от потенциально опасных действий.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4😐2❤1😁1
Срочные новости в .NET 10 Preview 4
Теперь можно запускать C#-файлы без создания проекта
Команда .NET представила отличное нововведение — file-based apps.
Теперь можно напрямую запускать один .cs-файл командой:
✅ Без
✅ Без шаблонов
✅ Мгновенный запуск
Как в Python или JavaScript — .cs-файлы становятся самодостаточными исполняемыми скриптами. Подходит для прототипов, обучения и автоматизации.
И это не игрушка — можно даже запускать полноценный Web API с Minimal API прямо из одного файла.
Ключевые возможности:
👉 Директивы на уровне файла:
• Подключение NuGet-пакетов
• Указание SDK
• Задание LangVersion
Пример:
👉 Поддержка shebang:
• Кроссплатформенные shell-скрипты
👉 Поддержка Minimal API:
• Реальный Web API в одном .cs-файле
Если скрипт перерастает в полноценное приложение, его легко конвертировать в проект:
И получаем чистую, структурированную основу для масштабирования
Доступно уже в .NET 10 Preview 4.
👉 @KodBlog
Теперь можно запускать C#-файлы без создания проекта
Команда .NET представила отличное нововведение — file-based apps.
Теперь можно напрямую запускать один .cs-файл командой:
dotnet run Program.cs
.csproj
Как в Python или JavaScript — .cs-файлы становятся самодостаточными исполняемыми скриптами. Подходит для прототипов, обучения и автоматизации.
И это не игрушка — можно даже запускать полноценный Web API с Minimal API прямо из одного файла.
Ключевые возможности:
• Подключение NuGet-пакетов
• Указание SDK
• Задание LangVersion
Пример:
#r "nuget: Humanizer, 2.14.1"
#sdk "Microsoft.NET.Sdk.Web"
#property LangVersion preview
• Кроссплатформенные shell-скрипты
• Реальный Web API в одном .cs-файле
Если скрипт перерастает в полноценное приложение, его легко конвертировать в проект:
dotnet project convert Program.cs
И получаем чистую, структурированную основу для масштабирования
Доступно уже в .NET 10 Preview 4.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23🤯12👍8🤔4🔥2
Прекрати усложнять CQRS
> Тебе не нужны библиотеки
> Не нужны десятки слоёв
> Не нужны магические абстракции
Как должен работать CQRS:
> Query — просто запрос данных
> Command — просто инструкция изменить что-то
> Handler — просто код, который делает нужную работу
Ты можешь:
✅ Написать свои
✅ Собрать простой pipeline с декораторами (логгинг, валидация)
✅ Сохранить полный контроль над связями
CQRS работает лучше всего, когда он простой и явный.
Большинство реализаций ломаются, потому что начинают гнаться за ненужной сложностью.
Читать статью: тык
👉 @KodBlog
> Тебе не нужны библиотеки
> Не нужны десятки слоёв
> Не нужны магические абстракции
Как должен работать CQRS:
> Query — просто запрос данных
> Command — просто инструкция изменить что-то
> Handler — просто код, который делает нужную работу
Ты можешь:
IQueryHandler
/ ICommandHandler
CQRS работает лучше всего, когда он простой и явный.
Большинство реализаций ломаются, потому что начинают гнаться за ненужной сложностью.
Читать статью: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4
dotnet разработчики, те, кто не использует инструменты для маппинга — как вы вручную мапите объект на объект?
И почему выбрали именно такой подход?🤔
Я собрал несколько популярных вариантов, начиная с :
> Пример маппинга через extension-методы
> Пример маппинга через конструктор
> Пример маппинга через статический метод:
> Пример маппинга через явный оператор
> Пример маппинга через неявный оператор
👉 @KodBlog
И почему выбрали именно такой подход?
Я собрал несколько популярных вариантов, начиная с :
> Пример маппинга через extension-методы
> Пример маппинга через конструктор
> Пример маппинга через статический метод:
> Пример маппинга через явный оператор
> Пример маппинга через неявный оператор
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
Задана задача импортировать JSON-данные, структура которых не соответствует модели. На 1 фото показан один из способов импорта, при котором одно свойство игнорируется, а два столбца переименовываются.
Результаты
> Новая структура JSON
> Она соответствует нашей модели
На втором фото пример кода с использованием библиотеки
Ставь лайк, если пост оказался полезным💯
👉 @KodBlog
Результаты
> Новая структура JSON
> Она соответствует нашей модели
На втором фото пример кода с использованием библиотеки
FluentValidation
для применения отдельных правил валидатора или всех правил — это может быть полезно для разных требований, а также при тестированииСтавь лайк, если пост оказался полезным
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🤔2
Думаешь, хорошо разбираешься в
Этот пост поменяет твой взгляд на перехват HTTP-запросов
Middleware в
Есть три подхода: на делегатах (inline), по соглашению (класс), и через
1️⃣ Сначала можно использовать метод
Такое middleware на основе делегата выполняется до и после следующего компонента в конвейере.
2️⃣ Если логика растёт — вынеси её в отдельный класс middleware по соглашению.
Класс должен иметь конструктор с
3️⃣ Либо реализуй интерфейс
Зарегистрируй класс
Но есть важные нюансы:
> Middleware по умолчанию живёт как singleton, поэтому внедряй только singleton-зависимости.
> Если нужны scoped-сервисы — передавай их через параметры InvokeAsync в middleware по соглашению.
Кастомные middleware используют для:
• логирования
• авторизации
• валидации
• модификации ответов
Какой подход к middleware ты используешь и почему? Напиши в комментах😎
👉 @KodBlog
ASP.NET Core middleware
?Этот пост поменяет твой взгляд на перехват HTTP-запросов
Middleware в
ASP.NET Core
— это компонент, участвующий в конвейере обработки HTTP-запросов и ответов.Есть три подхода: на делегатах (inline), по соглашению (класс), и через
IMiddleware
для кастомной логики.Use
напрямую в конфигурации WebApplication
.Такое middleware на основе делегата выполняется до и после следующего компонента в конвейере.
Класс должен иметь конструктор с
RequestDelegate
и метод InvokeAsync
.IMiddleware
— это более безопасный, проверяемый компилятором способ.Зарегистрируй класс
IMiddleware
в DI-контейнере, и фреймворк сам будет его разрешать.Но есть важные нюансы:
> Middleware по умолчанию живёт как singleton, поэтому внедряй только singleton-зависимости.
> Если нужны scoped-сервисы — передавай их через параметры InvokeAsync в middleware по соглашению.
Кастомные middleware используют для:
• логирования
• авторизации
• валидации
• модификации ответов
Какой подход к middleware ты используешь и почему? Напиши в комментах
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍3🔥3