.NET-блог Егора Сычева
Статьи, руководства и заметки о создании реальных систем.
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.