С неявными преобразованиями в
👉 @KodBlog
Span<T> в .NET 10 теперь можно передавать массивы напрямую в методы, которые ожидают Span<T> или ReadOnlySpan<T>, без вызова .AsSpan(). Это делает высокопроизводительный код без аллокаций чище и безопаснее. Очень удобноPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6😁4🔥2❤1
Dictionary Expressions в C#?
Сейчас это предложение в статусе champion (ссылка ниже) и продолжение фичи Collection Expressions из C# 12.
Что думаете?👎 или 👍
Предложение Dictionary Expressions
👉 @KodBlog
Сейчас это предложение в статусе champion (ссылка ниже) и продолжение фичи Collection Expressions из C# 12.
Что думаете?
Предложение Dictionary Expressions
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🥴9👎5❤2🤔2
Большинство разработчиков используют Code-First или Database-First подход в EF Core.
Но немногие знают про Model-First
Database-First позволяет быстро сгенерировать модель из уже существующей базы.
Code-First даёт возможность строить базу данных из C#-классов и управлять схемой через миграции.
Однако оба подхода могут замедлять разработку, если приходится вручную настраивать сложные сущности и связи.
Есть более эффективный и современный вариант — Model-First.
Вместо ручного написания моделей и конфигураций вы проектируете их визуально.
Эти визуальные модели автоматически преобразуются в сущности EF Core и схемы базы данных.
Одним из лучших инструментов для Model-First является Entity Developer от Devart.
Он делает моделирование сущностей простым и удобным.
С помощью drag-and-drop интерфейса не нужно писать классы и вручную задавать связи.
– Меньше времени на шаблонный код и повторяющиеся конфигурации
– Быстрая генерация и обновление моделей по сравнению с ручным кодом
– Меньше риска ошибок рантайма из-за неверных маппингов или конфигураций
– Entity Developer генерирует корректный код и SQL-скрипты за вас
Вот гайд по тому, как именно это реализовать:
- Начало работы: создание EF Core модели для PostgreSQL
- Визуальное проектирование модели данных
- Генерация SQL-скриптов для PostgreSQL
- Автоматизация генерации кода EF Core
- Основные преимущества для разработки на EF Core + PostgreSQL
👉 @KodBlog
Но немногие знают про Model-First
Database-First позволяет быстро сгенерировать модель из уже существующей базы.
Code-First даёт возможность строить базу данных из C#-классов и управлять схемой через миграции.
Однако оба подхода могут замедлять разработку, если приходится вручную настраивать сложные сущности и связи.
Есть более эффективный и современный вариант — Model-First.
Вместо ручного написания моделей и конфигураций вы проектируете их визуально.
Эти визуальные модели автоматически преобразуются в сущности EF Core и схемы базы данных.
Одним из лучших инструментов для Model-First является Entity Developer от Devart.
Он делает моделирование сущностей простым и удобным.
С помощью drag-and-drop интерфейса не нужно писать классы и вручную задавать связи.
– Меньше времени на шаблонный код и повторяющиеся конфигурации
– Быстрая генерация и обновление моделей по сравнению с ручным кодом
– Меньше риска ошибок рантайма из-за неверных маппингов или конфигураций
– Entity Developer генерирует корректный код и SQL-скрипты за вас
Вот гайд по тому, как именно это реализовать:
- Начало работы: создание EF Core модели для PostgreSQL
- Визуальное проектирование модели данных
- Генерация SQL-скриптов для PostgreSQL
- Автоматизация генерации кода EF Core
- Основные преимущества для разработки на EF Core + PostgreSQL
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥5👏1
Всё, что нужно, чтобы запустить реальный продукт
1. Аутентификация → [ASP .NET Core Identity]
2. База данных → [EF Core + SQL Server/PostgreSQL]
3. Платежи → [Stripe, PayPal]
4. Безопасность → [FluentValidation, OWASP]
5. Фронтенд → [Next.js + Shadcn/UI]
6. Бэкенд → [ASP .NET Core Web API]
7. Уведомления → [SendGrid, SignalR]
8. Наблюдаемость → [Application Insights, Serilog, OpenTelemetry]
Надёжный фундамент превращает идеи в работающие продукты.
👉 @KodBlog
1. Аутентификация → [ASP .NET Core Identity]
2. База данных → [EF Core + SQL Server/PostgreSQL]
3. Платежи → [Stripe, PayPal]
4. Безопасность → [FluentValidation, OWASP]
5. Фронтенд → [Next.js + Shadcn/UI]
6. Бэкенд → [ASP .NET Core Web API]
7. Уведомления → [SendGrid, SignalR]
8. Наблюдаемость → [Application Insights, Serilog, OpenTelemetry]
Надёжный фундамент превращает идеи в работающие продукты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4
Какой способ пагинации лучше использовать?
Это зависит от данных.
Offset-пагинация используется по умолчанию: пропускаешь X строк, берёшь следующие Y.
Нормально для небольших выборок или неглубоких страниц, но чем дальше идёшь, тем медленнее работает.
Keyset (или cursor) пагинация лучше подходит для больших или часто обновляемых данных.
Вместо пропуска строк она «ищет» последнюю известную позицию (например, ID или timestamp) и оттуда достаёт следующую страницу.
Это быстрее, стабильнее и отлично работает для таких случаев, как:
- бесконечный скролл
- ленты активности
- почтовые ящики
Если делаешь что-то похожее, может помочь эта статья
А ты в своём проекте что используешь ?
offset - 👍 или keyset -❤️
👉 @KodBlog
Это зависит от данных.
Offset-пагинация используется по умолчанию: пропускаешь X строк, берёшь следующие Y.
Нормально для небольших выборок или неглубоких страниц, но чем дальше идёшь, тем медленнее работает.
Keyset (или cursor) пагинация лучше подходит для больших или часто обновляемых данных.
Вместо пропуска строк она «ищет» последнюю известную позицию (например, ID или timestamp) и оттуда достаёт следующую страницу.
Это быстрее, стабильнее и отлично работает для таких случаев, как:
- бесконечный скролл
- ленты активности
- почтовые ящики
Если делаешь что-то похожее, может помочь эта статья
А ты в своём проекте что используешь ?
offset - 👍 или keyset -❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤8
Похоже, ты пропустил эти два типа коллекций.
Стоит о них знать, потому что…
Frozen collections — это новые коллекции, которые на 100% неизменяемы.
Но разве в .NET уже нет read-only и immutable коллекций?
Есть, но нюанс вот в чём…
Read-only коллекция может поменяться, если изменить исходную структуру данных.
Immutable коллекция при изменении создаёт новую копию оригинала с новыми значениями.
И вот тут проблема.
Frozen collections работают иначе.
После создания их изменить нельзя + у них вообще нет методов модификации.
На данный момент доступны только два типа:
- FrozenDictionary
- FrozenSet
Это абстрактные классы, их нельзя создать напрямую, как обычные Dictionary или Set.
Но можно использовать extension-методы.
Их стоит применять там, где коллекция редко создаётся, но часто используется.
Они оптимизированы под:
- быстрый доступ по ключу
- эффективное использование памяти
- потокобезопасность
Минус — более медленное создание.
Но, на мой взгляд, это вполне оправдано с учётом получаемых оптимизаций. Cогласны?👍
👉 @KodBlog
Стоит о них знать, потому что…
Frozen collections — это новые коллекции, которые на 100% неизменяемы.
Но разве в .NET уже нет read-only и immutable коллекций?
Есть, но нюанс вот в чём…
Read-only коллекция может поменяться, если изменить исходную структуру данных.
Immutable коллекция при изменении создаёт новую копию оригинала с новыми значениями.
И вот тут проблема.
Frozen collections работают иначе.
После создания их изменить нельзя + у них вообще нет методов модификации.
На данный момент доступны только два типа:
- FrozenDictionary
- FrozenSet
Это абстрактные классы, их нельзя создать напрямую, как обычные Dictionary или Set.
Но можно использовать extension-методы.
Их стоит применять там, где коллекция редко создаётся, но часто используется.
Они оптимизированы под:
- быстрый доступ по ключу
- эффективное использование памяти
- потокобезопасность
Минус — более медленное создание.
Но, на мой взгляд, это вполне оправдано с учётом получаемых оптимизаций. Cогласны?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤5
Вот подробное руководство для C#-разработчиков по созданию и работе с серверами Model Context Protocol (MCP). Это практический материал для изучения MCP и интеграции AI-ассистентов в .NET-среде.
В .net 10 сервер MCP можно сделать за 20 строк кода — чек
👉 @KodBlog
В .net 10 сервер MCP можно сделать за 20 строк кода — чек
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - microsoft/lets-learn-mcp-csharp
Contribute to microsoft/lets-learn-mcp-csharp development by creating an account on GitHub.
❤8🔥1
Как сделать ежедневный отчёт и отправить его пользователям на почту?
Для этого можно использовать Coravel
Coravel — это библиотека для .NET без лишней конфигурации, вдохновлённая Laravel. Она добавляет в приложение фоновые задачи и автоматизацию, упрощая работу с бэкендом.
С помощью неё можно запускать задачи по расписанию, выполнять фоновые джобы в очереди, использовать invocables (классы фоновых задач), делать event broadcasting внутри процесса, рассылать письма и кешировать данные. Для всего этого не нужен ни брокер сообщений, ни база, ни внешние сервисы.
Конечно, Coravel не подойдёт для критически важных фоновых задач, где нужна надёжная персистентность или распределённая координация. Но как «ускоритель продуктивности» для .NET приложений — вполне рабочее решение.
Пробовал ли ты его? Ставь 👍 если да
Подробнее здесь: читать
👉 @KodBlog
Для этого можно использовать Coravel
Coravel — это библиотека для .NET без лишней конфигурации, вдохновлённая Laravel. Она добавляет в приложение фоновые задачи и автоматизацию, упрощая работу с бэкендом.
С помощью неё можно запускать задачи по расписанию, выполнять фоновые джобы в очереди, использовать invocables (классы фоновых задач), делать event broadcasting внутри процесса, рассылать письма и кешировать данные. Для всего этого не нужен ни брокер сообщений, ни база, ни внешние сервисы.
Конечно, Coravel не подойдёт для критически важных фоновых задач, где нужна надёжная персистентность или распределённая координация. Но как «ускоритель продуктивности» для .NET приложений — вполне рабочее решение.
Пробовал ли ты его? Ставь 👍 если да
Подробнее здесь: читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👨💻2
Работаете с легаси-SQL в EF Core?
Хранимые процедуры, представления, странные джойны, которые не мапятся на ваши сущности?
Поддержка «сырого» SQL в EF Core сняла для меня большую боль.
Я просто объявляю простой POCO, пишу SQL и позволяю EF выполнить маппинг.
Никакой грязной конфигурации. Никакой ручной материализации.
И так как используются параметризованные запросы, это ещё и безопасно в плане SQL-инъекций.
Если вы работаете с легаси-базами, эта фича — спасение.👍
Вот как этим пользоваться: тык
👉 @KodBlog
Хранимые процедуры, представления, странные джойны, которые не мапятся на ваши сущности?
Поддержка «сырого» SQL в EF Core сняла для меня большую боль.
Я просто объявляю простой POCO, пишу SQL и позволяю EF выполнить маппинг.
Никакой грязной конфигурации. Никакой ручной материализации.
И так как используются параметризованные запросы, это ещё и безопасно в плане SQL-инъекций.
Если вы работаете с легаси-базами, эта фича — спасение.
Вот как этим пользоваться: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍7🔥1
15 гайдов для изучения 15 лучших паттернов проектирования:
👉 @KodBlog
1. Singleton: https://algomaster.io/learn/lld/singleton
2. Factory Method: https://algomaster.io/learn/lld/factory-method
3. Abstract Factory: https://algomaster.io/learn/lld/abstract-factory
4. Builder: https://algomaster.io/learn/lld/builder
5. Adapter: https://algomaster.io/learn/lld/adapter
6. Facade: https://algomaster.io/learn/lld/facade
7. Decorator: https://algomaster.io/learn/lld/decorator
8. Composite: https://algomaster.io/learn/lld/composite
9. Proxy: https://algomaster.io/learn/lld/proxy
10. Iterator: https://algomaster.io/learn/lld/iterator
11. Observer: https://algomaster.io/learn/lld/observer
12. Strategy: https://algomaster.io/learn/lld/strategy
13. Command: https://algomaster.io/learn/lld/command
14. State: https://algomaster.io/learn/lld/state
15. Template Method: https://algomaster.io/learn/lld/template-method
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3
Вот список постов Стивена Тауба про улучшения производительности в разных версиях .NET. Удобно держать под рукой:
Надеюсь, завезет и про dotnet 10👍
👉 @KodBlog
.NET 9
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-9/
.NET 8
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
.NET 7
https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/
.NET 6
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/
.NET 5
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/
.NET 3.0
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/
.NET 2.1
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-2-1/
.NET 2.0
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core/
Надеюсь, завезет и про dotnet 10
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Как кеш может работать неправильно?
Есть несколько типичных ситуаций. Проблема стадного эффекта возникает, когда одновременно истекает много ключей. Все запросы начинают идти прямо в базу, и она перегружается.
Это решается добавлением случайного времени к сроку жизни ключей или ограничением доступа к базе только для критичных данных, пока кеш не восстановится.
Пробой кеша случается, когда ключа нет ни в кеше, ни в базе. Приложение не может обновить кеш и создаёт лишнюю нагрузку. В этом случае помогает кеширование null для несуществующих ключей или проверка ключа через bloom filter, чтобы лишний раз не обращаться к базе.
Есть и пробой по «горячему» ключу. Когда один популярный ключ истекает, вся нагрузка уходит в базу. Поскольку такие ключи могут составлять большую часть запросов, для них обычно не задают время жизни.
Кеш может и просто упасть. Тогда все запросы идут в базу, и система перестаёт справляться. Здесь выход либо в использовании circuit breaker, который блокирует обращения и к кешу, и к базе, либо в развёртывании кластера кеша, чтобы повысить его доступность.
А вы встречали такие ситуации в продакшене?😱
👉 @KodBlog
Есть несколько типичных ситуаций. Проблема стадного эффекта возникает, когда одновременно истекает много ключей. Все запросы начинают идти прямо в базу, и она перегружается.
Это решается добавлением случайного времени к сроку жизни ключей или ограничением доступа к базе только для критичных данных, пока кеш не восстановится.
Пробой кеша случается, когда ключа нет ни в кеше, ни в базе. Приложение не может обновить кеш и создаёт лишнюю нагрузку. В этом случае помогает кеширование null для несуществующих ключей или проверка ключа через bloom filter, чтобы лишний раз не обращаться к базе.
Есть и пробой по «горячему» ключу. Когда один популярный ключ истекает, вся нагрузка уходит в базу. Поскольку такие ключи могут составлять большую часть запросов, для них обычно не задают время жизни.
Кеш может и просто упасть. Тогда все запросы идут в базу, и система перестаёт справляться. Здесь выход либо в использовании circuit breaker, который блокирует обращения и к кешу, и к базе, либо в развёртывании кластера кеша, чтобы повысить его доступность.
А вы встречали такие ситуации в продакшене?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
В .NET 9 может быть самая удобная платформа для микросервисов и вот почему.
Обычно команды тратят недели, чтобы собрать в кучу отказоустойчивость, наблюдаемость, сервис-дискавери и API-шлюзы.
В .NET 9 всё это уже есть из коробки.
- Resilience
Встроенные ретраи, таймауты и circuit breakers, без сторонних библиотек.
- Observability
Поддержка OpenTelemetry из коробки. Трассировки, метрики и логи без лишних усилий.
- .NET Aspire
Cloud-native стек для быстрых распределённых систем.
- Service Discovery
Можно использовать логические имена сервисов вместо жёстко прописанных URL. В рантайме они резолвятся через конфиг.
- API Gateway
YARP — лёгкий reverse proxy, который работает и как API-шлюз, с минимальной настройкой.
Если вы строите микросервисы на .NET, больше не нужно собирать инфраструктуру вручную.
Подробности: ссылка
А как вы строите микросервисы?👍
👉 @KodBlog
Обычно команды тратят недели, чтобы собрать в кучу отказоустойчивость, наблюдаемость, сервис-дискавери и API-шлюзы.
В .NET 9 всё это уже есть из коробки.
- Resilience
Встроенные ретраи, таймауты и circuit breakers, без сторонних библиотек.
- Observability
Поддержка OpenTelemetry из коробки. Трассировки, метрики и логи без лишних усилий.
- .NET Aspire
Cloud-native стек для быстрых распределённых систем.
- Service Discovery
Можно использовать логические имена сервисов вместо жёстко прописанных URL. В рантайме они резолвятся через конфиг.
- API Gateway
YARP — лёгкий reverse proxy, который работает и как API-шлюз, с минимальной настройкой.
Если вы строите микросервисы на .NET, больше не нужно собирать инфраструктуру вручную.
Подробности: ссылка
А как вы строите микросервисы?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥1
Как включить DATAS в .NET 8
Dynamic adaptation to application sizes (DATAS) по умолчанию включен в dotnet 9, и многие приложения благодаря этому заметно сократили потребление памяти.
В .NET 8 можно включить его через настройку выше.
Не забудь прогнать бенчмарки своего сценария до и после.
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/datas
👉 @KodBlog
Dynamic adaptation to application sizes (DATAS) по умолчанию включен в dotnet 9, и многие приложения благодаря этому заметно сократили потребление памяти.
В .NET 8 можно включить его через настройку выше.
Не забудь прогнать бенчмарки своего сценария до и после.
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/datas
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥2
Redis полезен не только для кэширования.
С его помощью можно реализовать базовый Pub/Sub механизм.
Если ты когда-нибудь писал распределенные системы или микросервисы в dotnet, наверняка сталкивался с проблемой синхронизации сервисов.
Нужно как-то уведомлять другие сервисы о событиях, сбрасывать кэш или слать обновления на дашборд в реальном времени, а значит без механизма обмена сообщениями не обойтись.
RabbitMQ и Kafka отлично подходят для сложных сценариев, но иногда достаточно чего-то простого, быстрого и уже встроенного в стек. Здесь пригодится Redis Pub/Sub.
Эта встроенная возможность Redis позволяет сервисам отправлять и получать сообщения через именованные каналы. Publisher пишет сообщение в канал, а Subscriber слушает его и сразу обрабатывает входящие данные.
Работает это быстро, не требует хранения сообщений и практически не нагружает систему. Хорошо подходит для задач в реальном времени, где потеря пары сообщений не критична.
Например, для обновления интерфейсов в реальном времени, для инвалидации кэша между сервисами или для передачи сигналов между приложениями.
Пример реализации: https://thecodeman.net/posts/messaging-in-dotnet-with-redis✏️
👉 @KodBlog
С его помощью можно реализовать базовый Pub/Sub механизм.
Если ты когда-нибудь писал распределенные системы или микросервисы в dotnet, наверняка сталкивался с проблемой синхронизации сервисов.
Нужно как-то уведомлять другие сервисы о событиях, сбрасывать кэш или слать обновления на дашборд в реальном времени, а значит без механизма обмена сообщениями не обойтись.
RabbitMQ и Kafka отлично подходят для сложных сценариев, но иногда достаточно чего-то простого, быстрого и уже встроенного в стек. Здесь пригодится Redis Pub/Sub.
Эта встроенная возможность Redis позволяет сервисам отправлять и получать сообщения через именованные каналы. Publisher пишет сообщение в канал, а Subscriber слушает его и сразу обрабатывает входящие данные.
Работает это быстро, не требует хранения сообщений и практически не нагружает систему. Хорошо подходит для задач в реальном времени, где потеря пары сообщений не критична.
Например, для обновления интерфейсов в реальном времени, для инвалидации кэша между сервисами или для передачи сигналов между приложениями.
Пример реализации: https://thecodeman.net/posts/messaging-in-dotnet-with-redis
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Для дотнетчиков подъехала полезная штука
Каждый год выходит новая версия C#, и уже давно стало трудно уследить за всеми фичами. Одни реально экономят время, другие просто красивые игрушки.💃
Чтобы не тонуть в апдейтах, появился чеклист Stay Sharp. В нём собрали 23 самых толковых фичи из C# 9–13. Для каждой есть короткое объяснение, кусок кода и пример вывода в консоли.
Чеклист можно забрать бесплатно (может потребоваться ВПН)
Отличный способ быстро апнуть скилл и не пропускать реально полезные возможности языка
👉 @KodBlog
Каждый год выходит новая версия C#, и уже давно стало трудно уследить за всеми фичами. Одни реально экономят время, другие просто красивые игрушки.
Чтобы не тонуть в апдейтах, появился чеклист Stay Sharp. В нём собрали 23 самых толковых фичи из C# 9–13. Для каждой есть короткое объяснение, кусок кода и пример вывода в консоли.
Чеклист можно забрать бесплатно (может потребоваться ВПН)
Отличный способ быстро апнуть скилл и не пропускать реально полезные возможности языка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4😁1
Малоизвестная фича в C# —
Она позволяет давать новое имя уже существующему типу.
Мы использовали её в крупном проекте по модернизации, где было море конфликтов типов, и это реально спасло.
Причём alias работает даже с кортежами.
Кто-нибудь ещё применял это в продакшене?🤝
👉 @KodBlog
type aliasОна позволяет давать новое имя уже существующему типу.
Мы использовали её в крупном проекте по модернизации, где было море конфликтов типов, и это реально спасло.
Причём alias работает даже с кортежами.
Кто-нибудь ещё применял это в продакшене?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍6😁2👎1
Младший разработчик подключает EF Core прямо в контроллере.
Миддл делает схему
Сеньор использует Clean Architecture.
Архитектор снова возвращает EF Core в контроллер.
Почему так?☕️
Потому что в реальных проектах выигрывают простые решения.
Слои стоит добавлять только тогда, когда они действительно нужны.
Небольшое приложение спокойно живет с EF Core прямо в контроллерах или минимальных API эндпоинтах.
Проект среднего размера может выиграть от слоя приложений, например сервисов или хендлеров.
Большая система уже требует вертикальных срезов, Clean Architecture или даже DDD.
Главный урок в том, что не нужно перегружать архитектуру заранее. Строй по шагам.
Если понадобится больше сложности, можно добавить.
Если нет, оставляй всё простым и двигайся дальше.
Всегда есть возможность отрефакторить или расширить потом.
Фокусируйся на том, чтобы приносить пользу, а не плодить слои.
P.S. EF Core уже реализует паттерны Repository и Unit of Work, поэтому в большинстве случаев писать свои репозитории нет необходимости.
👉 @KodBlog
Миддл делает схему
Контроллер - Сервис - Репозиторий.Сеньор использует Clean Architecture.
Архитектор снова возвращает EF Core в контроллер.
Почему так?
Потому что в реальных проектах выигрывают простые решения.
Слои стоит добавлять только тогда, когда они действительно нужны.
Небольшое приложение спокойно живет с EF Core прямо в контроллерах или минимальных API эндпоинтах.
Проект среднего размера может выиграть от слоя приложений, например сервисов или хендлеров.
Большая система уже требует вертикальных срезов, Clean Architecture или даже DDD.
Главный урок в том, что не нужно перегружать архитектуру заранее. Строй по шагам.
Если понадобится больше сложности, можно добавить.
Если нет, оставляй всё простым и двигайся дальше.
Всегда есть возможность отрефакторить или расширить потом.
Фокусируйся на том, чтобы приносить пользу, а не плодить слои.
P.S. EF Core уже реализует паттерны Repository и Unit of Work, поэтому в большинстве случаев писать свои репозитории нет необходимости.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤5😐4🤔1
Вышел экспресс курс по Keycloak 🎉
Keycloak это бесплатный сервер аутентификации который сразу даёт безопасные логины, управление паролями и JWT. Теперь не нужно тратить время на авторизацию с нуля и можно сосредоточиться на разработке приложения.
Всего за 45 минут показывают как поднять Keycloak в Docker, подключить и защитить .NET API, настроить OAuth 2.0 Authorization Code Flow, управлять пользователями, генерировать JWT и закрыть эндпоинты для неавторизованных запросов.
Полный курс тут
👉 @KodBlog
Keycloak это бесплатный сервер аутентификации который сразу даёт безопасные логины, управление паролями и JWT. Теперь не нужно тратить время на авторизацию с нуля и можно сосредоточиться на разработке приложения.
Всего за 45 минут показывают как поднять Keycloak в Docker, подключить и защитить .NET API, настроить OAuth 2.0 Authorization Code Flow, управлять пользователями, генерировать JWT и закрыть эндпоинты для неавторизованных запросов.
Полный курс тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤🔥4