Dapper vs EF Core: практическое сравнение производительности в .NET

Практический benchmark Dapper и EF Core в .NET с PostgreSQL, BenchmarkDotNet, реалистичными чтениями, JOIN, обновлениями, параллельными запросами и анализом аллокаций.

Читать дальше →

Строим базу данных в текстовом файле - меньше аллокаций со Span<T>

Пост 4 из серии Advanced C# for Your Next Interview: переводим file storage на append-only NDJSON и используем Span<T>, чтобы уменьшить лишние аллокации.

Читать дальше →

Synchronization Primitives в .NET: User Mode, Kernel Mode и Thread Affinity

Пост 3 из серии Advanced C# for Your Next Interview: чем отличаются synchronization primitives в .NET по стоимости ожидания, ownership, thread affinity и async support.

Читать дальше →

Исправляем race condition - SemaphoreSlim в действии

Пост 2 из серии Advanced C# for Your Next Interview: исправляем read-modify-write race condition с помощью SemaphoreSlim.

Читать дальше →

Строим базу данных в текстовом файле - почему async недостаточно

Пост 1 из серии Advanced C# for Your Next Interview: строим простое file-based storage и разбираем, почему async сам по себе не делает код безопасным под нагрузкой.

Читать дальше →

Strangler Fig Pattern: пошаговая миграция с Legacy MVC на .NET Core

Как постепенно и безопасно мигрировать legacy ASP.NET MVC приложение на ASP.NET Core с помощью паттерна Strangler Fig.

Читать дальше →

Малоизвестные факты из истории C#, которые стоит знать

Ключевые моменты истории C#: Anders Hejlsberg, исследовательский проект Comega, LINQ, async/await и влияние языка на индустрию.

Читать дальше →

Proactive configuration validation в .NET: предотвращаем ошибки заранее

Как валидировать appsettings при старте через DataAnnotations и .ValidateOnStart(), чтобы fail fast и избегать скрытых багов.

Читать дальше →

Feature Flags в .NET с IFeatureManager

Как управлять feature flags в .NET через IFeatureManager и менять поведение приложения через configuration.

Читать дальше →

Чем Clean Architecture отличается от Layered Architecture

Чем Clean Architecture отличается от Layered Architecture.

Читать дальше →

Практический guide по WarningsAsErrors

Как превращать .NET compiler warnings в errors глобально или выборочно и постепенно переходить к более строгим builds.

Читать дальше →

Подключаем свой MCP Server к GitHub Copilot

Как подключить свой MCP Server к GitHub Copilot.

Читать дальше →

Как добавить unit tests в legacy project

Легковесный подход к добавлению unit tests в legacy code без переписывания всего приложения.

Читать дальше →

Оптимизируем Nullable Annotations с [NotNullWhen(true)]

Как использовать NotNullWhen и другие nullable analysis attributes, чтобы выражать method contracts и убрать лишние C# warnings.

Читать дальше →

Критические уроки NASA о cyclomatic complexity: почему простой код спасает жизни

Что NASA выяснила о cyclomatic complexity, testing effort, MC/DC coverage и управляемости safety-critical software.

Читать дальше →

Архитектура, которую я использую в проектах: продолжение

Продолжение статьи об архитектуре, которую я использую в реальных проектах.

Читать дальше →

Архитектура, которую я использую в проектах

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

Читать дальше →

Разные CORS policies для endpoints в ASP.NET

Как использовать разные CORS policies для отдельных endpoints в ASP.NET.

Читать дальше →

Как привести package dependencies в проектах в порядок?

Почему удаление unused NuGet references может сломать .NET build и как исправлять misplaced и transitive package dependencies.

Читать дальше →

Как эффективно внедрить Clean Code практики в команде?

Как эффективно внедрить Clean Code практики в команде?

Читать дальше →

Как использовать ADR и не превратить их в бюрократию

Как сохранить Architecture Decision Records полезными и легковесными: практичный формат, который фиксирует контекст без лишней бюрократии.

Читать дальше →

Mocking HttpClient в C#

Как mock-ать HttpClient в C# unit tests без внешних HTTP mocking dependencies.

Читать дальше →