В C# скоро появятся Dictionary Expressions?
Это как продолжение фичи
Как тебе идея?🤔
👉 @KodBlog
Это как продолжение фичи
Collection Expressions из C# 12 — только теперь для словарей. Но пока что на стадии предложенияКак тебе идея?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤔10👍5👀3
Как проверить, что список не
Существует несколько способов это сделать:
1. Классический способ
2. Способ с
3. Способ с
4. Способ с
Какой из них ты предпочитаешь — или используешь другой подход?🤔
👉 @KodBlog
null и содержит элементы?Существует несколько способов это сделать:
1. Классический способ
2. Способ с
List.Count3. Способ с
Enumerable.Any4. Способ с
pattern matchingКакой из них ты предпочитаешь — или используешь другой подход?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍6❤2
Наткнулся тут на интересный проект — ReactiveGenerator
Это такой современный C# source generator, который автоматизирует реализацию уведомлений об изменении свойств, поддерживая как стандартный
Нам, разработчикам, это даёт главное — чистый код без тонны однотипной ручной писанины.
Например, раньше приходилось вручную писать геттеры и сеттеры с вызовами
Теперь же достаточно использовать атрибуты
👉 @KodBlog
Это такой современный C# source generator, который автоматизирует реализацию уведомлений об изменении свойств, поддерживая как стандартный
INotifyPropertyChanged, так и паттерны ReactiveUI Нам, разработчикам, это даёт главное — чистый код без тонны однотипной ручной писанины.
Например, раньше приходилось вручную писать геттеры и сеттеры с вызовами
RaiseAndSetIfChangedТеперь же достаточно использовать атрибуты
[Reactive] и [ObservableAsProperty]Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥1
Микросервисы
В правильном контексте они решают реальные проблемы
Мы создавали продукт, в котором разные команды владели разными бизнес-областями — платежи, биллинг, уведомления, отчётность.
Каждой команде нужно было быстро деплоиться, принимать решения независимо и масштабироваться в зависимости от нагрузки
Микросервисы сделали это возможным.
1. У платежей была высокая нагрузка → мы масштабировали только этот сервис
2. Отчётность требовала тяжёлой обработки → мы использовали другой стек
3. Уведомления? Деплоились по нескольку раз в день без влияния на остальное
Это прекрасно работало.
Почему? Потому что проблема была достаточно серьёзной, чтобы оправдать сложность.
Но вот главное:
Микросервисы — не отправная точка
Если вы строите небольшую или среднюю систему с одной командой, чистый монолит с модульными границами будет быстрее, дешевле и проще в управлении
Начните с простоты. Переходите к микросервисам, когда (и только когда) проблема станет реальной
👉 @KodBlog
В правильном контексте они решают реальные проблемы
Мы создавали продукт, в котором разные команды владели разными бизнес-областями — платежи, биллинг, уведомления, отчётность.
Каждой команде нужно было быстро деплоиться, принимать решения независимо и масштабироваться в зависимости от нагрузки
Микросервисы сделали это возможным.
1. У платежей была высокая нагрузка → мы масштабировали только этот сервис
2. Отчётность требовала тяжёлой обработки → мы использовали другой стек
3. Уведомления? Деплоились по нескольку раз в день без влияния на остальное
Это прекрасно работало.
Почему? Потому что проблема была достаточно серьёзной, чтобы оправдать сложность.
Но вот главное:
Микросервисы — не отправная точка
Если вы строите небольшую или среднюю систему с одной командой, чистый монолит с модульными границами будет быстрее, дешевле и проще в управлении
Начните с простоты. Переходите к микросервисам, когда (и только когда) проблема станет реальной
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💯5🔥1
У нас был один класс под названием
Он занимался всем:
Регистрацией пользователей. Проверкой паролей. Отправкой приветственных писем. Логированием событий. Обновлением информации профиля. Даже вызовами сторонних API
Он работал. Пока не перестал😵💫
Любое изменение становилось рискованным. Небольшое изменение в одном методе ломало другой. Юнит-тесты были в хаосе.
Никто не хотел к нему прикасаться
Вот тогда я по-настоящему понял принцип единственной ответственности (SRP):
🔜 Класс должен иметь только одну причину для изменения
Не потому что так красиво звучит. А потому что это делает код тестируемым, поддерживаемым и читаемым
Мы разбили
⏩ UserRegistrationService
⏩ EmailNotifier
⏩ PasswordValidator
⏩ AuditLogger
Вдруг всё стало понятно. Тесты стали точечными. Вносить изменения стало проще
SRP — это не просто правило. Это способ сохранить ваш код живым надолго
👉 @KodBlog
UserManagerОн занимался всем:
Регистрацией пользователей. Проверкой паролей. Отправкой приветственных писем. Логированием событий. Обновлением информации профиля. Даже вызовами сторонних API
Он работал. Пока не перестал
Любое изменение становилось рискованным. Небольшое изменение в одном методе ломало другой. Юнит-тесты были в хаосе.
Никто не хотел к нему прикасаться
Вот тогда я по-настоящему понял принцип единственной ответственности (SRP):
Не потому что так красиво звучит. А потому что это делает код тестируемым, поддерживаемым и читаемым
Мы разбили
UserManager на более мелкие, сфокусированные сервисы:Вдруг всё стало понятно. Тесты стали точечными. Вносить изменения стало проще
SRP — это не просто правило. Это способ сохранить ваш код живым надолго
Please open Telegram to view this post
VIEW IN TELEGRAM
❤29👍7🔥2🤯1🥴1
GUID, основанное на метке времени и случайностиТеперь GUID стал последовательным, что делает его более подходящим для реляционных баз данных
Также добавлено свойство
Version, позволяющее определить версию созданного GUIDPlease open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥7👍3
5 причин, почему простые extension-методы в C# чаще всего лучше AutoMapper 👇
1. Простота
Пишешь только то, что нужно и ничего лишнего. Extension-методы дают точное управление маппингом без лишней конфигурации
2. Производительность
Без рефлексии и скрытых накладных расходов. Прямой маппинг работает быстрее и экономит ценные миллисекунды на рантайме
3. Читаемость
Код должен рассказывать историю. Когда другой разработчик читает маппинг, extension-метод чаще всего более прозрачен
4. Гибкость
Это твой код. Можно легко адаптировать логику под конкретные кейсы, не упираясь в ограничения сторонней библиотеки.
5. Отладка
Можно спокойно зайти в свой маппинг-код и сразу увидеть, что и как работает. Без необходимости лезть в внутренности AutoMapper
Простота, производительность и контроль — часто выигрывают, особенно когда пишешь чистую и поддерживаемую архитектуру
👉 @KodBlog
1. Простота
Пишешь только то, что нужно и ничего лишнего. Extension-методы дают точное управление маппингом без лишней конфигурации
2. Производительность
Без рефлексии и скрытых накладных расходов. Прямой маппинг работает быстрее и экономит ценные миллисекунды на рантайме
3. Читаемость
Код должен рассказывать историю. Когда другой разработчик читает маппинг, extension-метод чаще всего более прозрачен
4. Гибкость
Это твой код. Можно легко адаптировать логику под конкретные кейсы, не упираясь в ограничения сторонней библиотеки.
5. Отладка
Можно спокойно зайти в свой маппинг-код и сразу увидеть, что и как работает. Без необходимости лезть в внутренности AutoMapper
Простота, производительность и контроль — часто выигрывают, особенно когда пишешь чистую и поддерживаемую архитектуру
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💯9❤3🔥3
Используй метод
string.Join, чтобы объединить элементы коллекции в одну строку, вставляя указанный разделитель между элементами.А ты используешь
string.Join в своём коде?Please open Telegram to view this post
VIEW IN TELEGRAM
👍23😁7❤5👏3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
ASP.NET Core Roadmap for .NET 10 · Issue #59443 · dotnet/aspnetcore
This issue represents the list of major investments our team will focus on during the .NET 10 timeframe. It doesn't include all the features and bug fixes we'll be tackling during this time...
🔥4❤3🤨2🤯1
Новый релиз бесплатного инструмента T-SQL Analyzer на .NET для выявления антипаттернов в T-SQL-скриптах — более 140 проверок
НОВОЕ: поддержка форматирования SQL-кода с использованием библиотеки SqlScriptDom
Приводите ваш T-SQL к единообразному и читаемому виду🍺
👉 @KodBlog
НОВОЕ: поддержка форматирования SQL-кода с использованием библиотеки SqlScriptDom
Приводите ваш T-SQL к единообразному и читаемому виду
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Подождите, что, Cursor Pro - это бесплатно?
Автоматическая регистрация в Cursor AI, автоматический сброс MachineID, бесплатное получение доступа к Pro-функциям
GitHub - https://github.com/yeongpin/cursor-free-vip🥴
👉 @KodBlog
Автоматическая регистрация в Cursor AI, автоматический сброс MachineID, бесплатное получение доступа к Pro-функциям
GitHub - https://github.com/yeongpin/cursor-free-vip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤4👍1
image_2025-04-11_11-04-44.png
1.2 MB
Краткая история языка C#
Microsoft выпустила C# 13 в ноябре прошлого года. За более чем 20 лет C# развивался через 13 версий, каждая из которых привносила новые возможности.
Вот краткий обзор этих функций:
👉 @KodBlog
Microsoft выпустила C# 13 в ноябре прошлого года. За более чем 20 лет C# развивался через 13 версий, каждая из которых привносила новые возможности.
Вот краткий обзор этих функций:
⏩ C# 1.0 (.NET 1.0, 2002): Первый релиз⏩ C# 1.2 (.NET 1.1, 2003): IDisposable для IEnumerators⏩ C# 2.0 (.NET 2.0, 2005): Обобщения, nullable-типы, итераторы⏩ C# 3.0 (.NET 3.5, 2007): Лямбда-выражения, LINQ, методы расширения⏩ C# 4.0 (.NET 4, 2010): Динамическое связывание, именованные аргументы, необязательные параметры⏩ C# 5.0 (.NET 4.5, 2012): Async/await, атрибуты информации о вызывающем⏩ C# 6.0 (.NET 4.6, 2015): Инициализаторы автосвойств, статические импорты, фильтры исключений⏩ C# 7.0 (.NET 4.7, 2017): Кортежи, сопоставление с образцом, ref-переменные и возвращаемые значения⏩ C# 7.1 (2017): Async main, вывод кортежей, выражения по умолчанию⏩ C# 7.2 (2017): Модификатор доступа private protected, Span<T>⏩ C# 7.3 (2018): Новые ограничения для обобщений, переназначение ref⏩ C# 8.0 (.NET Core 3.0, 2019): Nullable-ссылочные типы, индексы и диапазоны, using-объявления⏩ C# 9.0 (.NET 5.0, 2020): Records, свойства init, верхнеуровневые программы⏩ C# 10.0 (.NET 6.0, 2021): Record-структуры, глобальные using-и, пространства имён в файлах⏩ C# 11.0 (.NET 7.0, 2022): Обобщённая математика, обязательные члены, необработанные строковые литералы⏩ C# 12.0 (.NET 8.0, 2023): Выражения коллекций, первичные конструкторы⏩ C# 13.0 (.NET 9.0, 2024): Улучшенные параметры, частичные свойства, новый объект блокировки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6👍3🤯2😐1
Пример условного присваивания с null-проверкой в C# 14
Это нововведение доступно в C# 14 Preview 3 и позволяет выполнять присваивание свойству или полю только если экземпляр-объект существует (не равен
Что думаете?🤔
👉 @KodBlog
Это нововведение доступно в C# 14 Preview 3 и позволяет выполнять присваивание свойству или полю только если экземпляр-объект существует (не равен
null)Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥6🤯3
Что делает
Выше приведён пример до / после использования
В 1 случае —> только небольшая проблема «декартова взрыва», так как здесь соединяется всего одна таблица
… НО при большем количестве соединений дублирование данных увеличивается
Во 2 случае —> разделённые запросы означают меньше дублирования
… НО больше обращений к базе и потенциальная несогласованность данных
👉 @KodBlog
AsSplitQuery() в Entity Framework?Выше приведён пример до / после использования
В 1 случае —> только небольшая проблема «декартова взрыва», так как здесь соединяется всего одна таблица
… НО при большем количестве соединений дублирование данных увеличивается
Во 2 случае —> разделённые запросы означают меньше дублирования
… НО больше обращений к базе и потенциальная несогласованность данных
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4
Что такое преобразование клеймов (Claims Transformation) в
Если
Преобразование клеймов позволяет изменить клеймы до того, как приложение начнёт использовать их для авторизации🔧
С помощью этого механизма можно, например, добавить недостающие клеймы из базы данных или другого источника.
Почему это полезно —> читайте здесь: статья
👉 @KodBlog
ASP.NET Core?Если
access token от вашего провайдера идентификации (Identity Provider) не полностью соответствует внутренним требованиям авторизации вашего приложения, вы можете использовать преобразование клеймов.Преобразование клеймов позволяет изменить клеймы до того, как приложение начнёт использовать их для авторизации
С помощью этого механизма можно, например, добавить недостающие клеймы из базы данных или другого источника.
Почему это полезно —> читайте здесь: статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥1
Хочешь условный middleware в .NET?
Используй
✅ Преимущества:
—> Повышает производительность
—> Поддерживает чистоту кода
—> Позволяет реализовать логику для конкретных маршрутов
Идеально для сложных приложений. Просто, мощно и аккуратно.
👉 @KodBlog
Используй
app.UseWhen(), чтобы применять middleware только при выполнении определённых условий.—> Повышает производительность
—> Поддерживает чистоту кода
—> Позволяет реализовать логику для конкретных маршрутов
Идеально для сложных приложений. Просто, мощно и аккуратно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4
Архитектор : «В .NET слишком любят всё усложнять.»
Он же через минуту : «А вот 10 ПОТРЯСАЮЩИХ паттернов, которые мы можем взять из референсной архитектуры eShop от Microsoft!😍 »
Давайте тогда возьмём сайт на WiX и превратим его в магистерскую диссертацию по распределённым системам
А вы тоже замечали такие противоречия среди разработчиков?
👉 @KodBlog
Он же через минуту : «А вот 10 ПОТРЯСАЮЩИХ паттернов, которые мы можем взять из референсной архитектуры eShop от Microsoft!
А вы тоже замечали такие противоречия среди разработчиков?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
200+ задач по структурам данных и алгоритмам
⏩ Массивы – https://bit.ly/3vM1JP5
⏩ Строки – https://bit.ly/3vM1JP5
⏩ Двоичное дерево – https://bit.ly/3JIsn1i
⏩ Связный список – https://bit.ly/3zFatrn
⏩ Динамическое программирование – https://bit.ly/3vLwjs5
⏩ Рекурсия – https://bit.ly/3JDhUnv
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2
Нужно получить ID вошедшего пользователя в Web API ? 🪑
(Предполагается, что ID пользователя был добавлен как claim при генерации токена)
—> Определи интерфейс
—> Реализуй его, чтобы считывать ID из claims
—> Зарегистрируй зависимости
—> Внедряй
👉 @KodBlog
(Предполагается, что ID пользователя был добавлен как claim при генерации токена)
—> Определи интерфейс
IUser—> Реализуй его, чтобы считывать ID из claims
—> Зарегистрируй зависимости
—> Внедряй
IUser и получай доступ к ID где угодноPlease open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2😈1