13726
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика Связь: @devmangx РКН: https://clck.ru/3FocB6
Как проверить, что список не null и содержит элементы?
Существует несколько способов это сделать:
1. Классический способ
2. Способ с List.Count
3. Способ с Enumerable.Any
4. Способ с pattern matching
Какой из них ты предпочитаешь — или используешь другой подход? 🤔
👉 @KodBlog
💡 EF Core Tip
При разработке можно включить EnableSensitiveDataLogging(), чтобы видеть реальные значения параметров в SQL-запросах — это помогает понять, что именно уходит в базу
Никогда не включай это в staging или production!
Функция логирует чувствительные данные (например, пароли, email, токены и т.д.), что может привести к утечке
⏩Можешь подробней почитать здесь
👉 @KodBlog
Устали листать запутанный и огромный файл Program.cs?
Вот как сделать его чище и читабельнее
Одно из первых, что мы делаем при создании приложения — это настройка:
⏩Логирования
⏩Базы данных и ORM
⏩CORS
⏩Аутентификации
⏩DI-сервисов
⏩Привязок для API
И всё это сваливается в Program.cs — и быстро превращается в кашу.
Вот тут и приходит на помощь паттерн расширения ServiceCollection
Он помогает организовать конфигурации сервисов в модульные, читабельные и тестируемые куски.
Больше никаких гигантских цепочек методов или запутанных блоков кода настройки.
Читай целый выпуск на эту тему с примерами
👉 @KodBlog
Иногда записи архитектурных решений просто огонь 😗
Примечание: AccountState находится в отношении 1:1 с SubscriptionState, поэтому оба используют один и тот же SubscriptionId в качестве первичного идентификатора.
Слушай, мы могли бы сделать их разными ради "чистого кода" или DDD-мусора, но эти две сущности связаны между собой, и Account будет генерировать события для Subscription — так эта штука работает в реальной жизни.
Так что, вместо того чтобы делать всё запутанным или добавлять лишние шаги только потому, что какой-то блогер сказал нам так делать, мы сделали эту связь очевидной и простой для понимания, особенно если ты уже знаешь, с каким SubscriptionId работаешь.
Этот дашборд для отслеживания цен на акции с использованием Cursor + .NET. 🔥
Использовав вайб-кодинг до того, как это стало модным )
Бэкенд получает начальную цену акции с бесплатного API фондового рынка.
Затем есть фоновая задача, которая случайным образом генерирует обновление цены и передает его клиентам с помощью SignalR.
UI — это чистый HTML + JavaScript + Tailwind CSS для стилизации
Потребовалось около ~15 секунд, чтобы добавить поддержку темного режима. 😱
Я с нетерпением жду, как будет развиваться Cursor. Это однозначно самый простой способ быстро создать работающее ПО.
Но поддерживаемость — это то, о чем нужно позаботиться.
В целом, код не плохой. Он работает и читаем. Cursor может даже писать комментарии и рефакторить код.
Я получил лучшие результаты, используя Claude Sonnet 3.5.
А ты уже пробовал Cursor?
👉 @KodBlog
Как управлять задержкой в методе Task.Delay в тестах?
Начиная с .NET 8, вы можете передать объект TimeProvider в метод Task.DelayTimeProvider будет интерпретировать задержку.
Вы можете использовать FakeTimeProvider, чтобы управлять задержкой в тестах.
👉 @KodBlog
Если нужно подготовиться к тех. интервью
То держи этот сайт с онлайн-тестами и вопросами
Подойдет для всех, кто работает с HTML, JavaScript, C#, Java, PHP, ASP,Net и другими ЯП.
⏩ссылка
👉 @KodBlog
Ах да, этот бесценный "специалист по методам расширения" — что бы мы без тебя делали) 😄
(их сотни в этом проекте)
👉 @KodBlog
Claude 3.7 Sonnet получил серьёзного конкурента
Gemini 2.5 Pro — действительно хорошая модель для кода 👍
⏩качество кода действительно высокое
⏩контекст 1M токенов
⏩нативная мультимодальность
⏩генерация длинного кода
⏩понимание крупных кодовых баз
Чувак на видео использовал его вместе с Windsurf для создания приложения поискового агента с ИИ
👉 @KodBlog
3 различных архитектурных подхода к организации компонентов в приложении
1. Классическая трёхслойная архитектура
Включает три уровня:
🟡MyApp.Web (контроллеры, взаимодействие с пользователем)
🟡MyApp.Business (бизнес-логика)
🟡MyApp.Data (доступ к данным)PoliciesController использует IPolicyService, который, в свою очередь, использует IPolicyRepository для работы с базой данных.
Классическая, но может приводить к сильной связанности.
2. CQRS-подход
🟡Использует паттерн Command Query Responsibility Segregation (CQRS)
🟡PoliciesController вызывает RenewPolicyCommand, который обрабатывается RenewPolicyHandler
🟡RenewPolicyHandler взаимодействует с IPolicyRepository, который работает с PolicyRepository
Улучшает разделение команд и запросов, подходит для сложных систем.
3. Компонентный подход
🟡Компоненты объединены в единый модуль MyApp.Policies.
🟡PoliciesController использует IPolicyComponent, который включает в себя PolicyComponent, PolicyService и PolicyRepository
Даёт больше гибкости, но требует продуманной структуры
Как вы упаковываете свои компоненты? 🤔
👉 @KodBlog
Есть такой инструмент — SharpRedirect
С ним можно легко перехватывать и перенаправлять сетевой трафик
Он принимает входящие TCP-подключения на локальный порт и пересылает их на указанный удалённый хост и порт.
😍 Поддерживает двустороннюю передачу данных в полном дуплексе, обеспечивая стабильную и асинхронную работу для повышения производительности.
👉 @KodBlog
Copilot, дружище, твои знания по C# отстают на год, а может и два 😄
👉 @KodBlog
Нашел для вас отличный репозиторий — Unity Clean Code
Это сборка лучших практик написания чистого кода в Unity, которые помогут сделать ваш проект структурированным и удобочитаемым.
Следуя рекомендациям, вы улучшаете архитектуру своих игр, упрощаете поддержку кода и учитесь писать более эффективные и понятные решения.
💬 Отличный выбор для всех, кто работает с Unity
👉 @KodBlog
В C# скоро появятся Dictionary Expressions?
Это как продолжение фичи Collection Expressions из C# 12 — только теперь для словарей. Но пока что на стадии предложения
Как тебе идея? 🤔
👉 @KodBlog
Минимальный пример приложения с поддержкой валидации в Minimal API — тык
Поддержка валидации в Minimal API будет добавлена в dotnet preview 3, который должен выйти совсем скоро
Пример показывает, как использовать атрибуты валидации, такие как Required, Range и StringLength, для проверки входных данных в минимальных API. Для запуска приложения перейдите в каталог api и выполните команду dotnet run
👉 @KodBlog
Как с помощью .NET 8 грамотно настроить ролевую авторизацию в многоуровневых приложениях
Всё это — с примерами кода и лучшими практиками, чтобы приложение было и безопасным, и масштабируемым.
⏩Читать тут
👉 @KodBlog | #cтатья
"EF Core медленный."
Нет. EF Core, вероятно, лучший фреймворк для доступа к базе данных среди всех языков прямо сейчас.
Но он не исправит плохой код или ваши плохие запросы.
Недавно я разбирал один проект, где тестировщики и разработчики жаловались:
"Наш .NET API тормозит в продакшене. Мы думаем, что EF Core — узкое место."
Я взглянул на код. Вот что я нашёл:
var users = await _context.Users.ToListAsync();
Skip(). без Take()ToList(), ломающий композицию запросаAsNoTracking() в сценариях с преобладанием чтенияInclude() повсюду, даже когда в этом нет нуждыSelect()
AutoMapper и MediatR переходят на коммерческую модель 😡
То есть, проекты больше не будут полностью open source. Джимми пишет, что делает это, чтобы обеспечить долгосрочную устойчивость своих OSS-проектов. Ну и сразу уточняет: «нет, это не первоапрельская шутка».
Короче, ещё один популярный open source — в платку. Тренд последних лет продолжается.
Вот источник
👉 @KodBlog
Тип OrderedDictionary существует в .NET с ранних версий
.NET 9 представляет его обобщенный аналог
Он создает словарь, в котором сохраняется порядок пар «ключ-значение».
Ты когда-нибудь использовал OrderedDictionary? 🤔
👉 @KodBlog
Я никогда не знал об этом! Вы можете открыть VS Code прямо в браузере из репозитория на GitHub.
Просто нажмите клавишу "." (точка)" в репозитории на GitHub. Это откроет репозиторий в веб-версии VS Code. Можно редактировать и коммитить изменения одним кликом.
Это работает даже если вы не владеете репозиторием! 😱
👉 @KodBlog
Вы устали писать один и тот же шаблон конструктора в каждом сервисе?
Объявить поле → Внедрить зависимость → Присвоить → Повторить 🔁
Здесь на помощь приходят первичные конструкторы в C# 12 — и они значительно упрощают код.
Я использовал их в статических сервисах и вот что заметил:
Плюсы:
☑ Меньше шаблонного кода, больше ясности
☑ Нет лишних полей и присваиваний
☑ Отлично подходят для Minimal API и DI
☑ Держат небольшие сервисы лаконичными и читаемыми
Минусы:
❌ Невозможность объявлять private readonly поля
Вы уже пробовали первичные конструкторы в реальных проектах?
👉 @KodBlog
Это правильный способ реализации посева данных в ваших .NET-приложениях
EF Core 9 значительно упростил этот процесс.
Больше не нужно переопределять OnModelCreating или вручную управлять скриптами заполнения данных.
EF 9 представил методы UseSeeding и UseAsyncSeeding, которые предоставляют удобный способ заполнения базы данных начальными данными.
👉 @KodBlog
А что скажут разработчики F#?
👉 @KodBlog
Как создать HttpClient в .NET?
Рекомендуемый способ — использование IHttpClientFactory
Вы можете использовать IHttpClientFactory напрямую.
Недостаток в том, что вам придется настраивать HttpClient каждый раз.
Если вам нужен заранее настроенный HttpClient, вы можете использовать именованные или типизированные клиенты.
Вот правильный способ работы с HttpClient в .NET: тык
👉 @KodBlog
💡 В .NET 8 появился новый интерфейс IExceptionHandler, который упрощает глобальную обработку исключений в aspnetcore.
Раньше обработчики исключений часто становились сложными и запутанными, так как в одном методе приходилось учитывать множество разных типов ошибок. Теперь же IExceptionHandler позволяет создавать отдельные обработчики для конкретных исключений, делая код чище и удобнее.
Достаточно реализовать метод TryHandleAsync, подключить его через UseExceptionHandler — и всё готово.
Это чисто. Модульно. Поддерживаемо. И, честно говоря, давно пора.
⏩Подробно читай в статье: тык
👉 @KodBlog
EF Core — это потрясающе, но давайте будем честными. Перебор записей в цикле для их обновления — не очень.
Обновление тысяч строк по одной — верный способ замедлить работу и перегрузить базу данных.
Есть способ получше — массовые обновления. 😎
👉 @KodBlog