C# 1001 notes
6.53K subscribers
315 photos
10 videos
2 files
303 links
Регулярные короткие заметки по C# и .NET.

Просто о сложном для каждого.

admin - @haarrp
Download Telegram
Рефлексия с#

С выходом новых версий "net" у многих пользователей вновь появились вопросы о рефлексии на с#. Даже опытные программисты забыли о её существовании.

Давайте же вспомним основные возможности рефлексии на c#:

▪️Рефлексия в C# позволяет получить информацию о типе объекта, например, его имя, базовый класс, реализованные интерфейсы, методы, свойства и поля.
▪️Позволяет создать экземпляр объекта даже без знания его типа во время компиляции. Она предоставляет возможность создавать объекты динамически и задавать значения их свойств и полей.
▪️Вызов методов и доступ к полям
▪️Динамическое создание типов
▪️Рефлексия позволяет динамически загружать и разрешать сборки, а также получать доступ к типам и объектам, определенным в этих сборках.


❗️Однако, использование рефлексии может снизить производительность программы, поэтому следует применять ее с осторожностью и только там, где это действительно необходимо. ❗️
💥F# 8 был выпущен в рамках dotNET8.💥

Net8
содержит множеств обновлений и новых фич.

Так же много интерсных обновлений выпущены для F#8.

Подробнее об обновлении можно прочитать здесь:

📌Читать далее

@csharp_1001_notes
ℹ️Доменные моделиℹ️

Доменная Модель - это система абстракций, которая описывает выбранные аспекты предметной области (домена) и может быть использована для решения проблем относящихся к этой предметной области.

Существует 2 вида доменных моделей.

В Domain-Driven Design вы переносите логику в домен.

Объекты домена содержат богатое поведение и инкапсулируют правила.
Важные части логики и правил находятся в одном месте.
Это повышает согласованность и упрощает добавление новых функций.

Но как разработать богатую модель домена?

Это бесконечный процесс переноса логики в домен и уточнения модели домена.

Отличный способ изучить DDD и то, как разрабатывать модели домена, - это рефакторинг существующих сценариев использования.

Вы выделяете часть логики, которая должна быть перенесена в домен.
Затем вы "проталкиваете" эту логику в объекты домена.

@csharp_1001_notes
🖥 Улучшения сетевых технологий в .NET 8

https://devblogs.microsoft.com/dotnet/dotnet-8-networking-improvements/ #aspnetcore

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 BenchmarkDotNet

BenchmarkDotNet
поможет вам превратить методы в бенчмарки, отслеживать их производительность и делиться экспериментами по измерениям. Это не сложнее, чем писать модульные тесты!

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

BenchmarkDotNet защищает вас от многих ошибок бенчмаркинга и предупреждает, если что-то не так с кодом бенчмарка или полученными измерениями.

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

BenchmarkDotNet уже используется в 18700+ проектах GitHub, включая .NET Runtime, .NET Compiler, .NET Performance и многие другие.

Github
Почитать

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 C# Language Design

Обсуждение дизайна языка: Если вы языковой гик или просто интересуетесь тем, как развивается C#, обратите внимание на этот репозиторий!

https://github.com/dotnet/csharplang/

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как легко заблокировать нежелательных пользователей?

И как просто реализовать API с ограничением запросов?

Вы можете решить обе проблемы с помощью функции RateLimitPartition.

Если вы используете .NET 7, вам не нужны сторонние библиотеки.

Все необходимые инструменты уже готовы для работы .

- Выберите алгоритм ограничения скорости
- Создайте политику ограничения скорости с разделением на части
- Примените ее к обратному прокси-серверу или определенным эндпоинтам.

Ограничение скорости по IP отлично подходит для неаутентифицированных пользователей.

Используйте правильный IP-адрес, если ваш API находится на обратном прокси.

Иначе вы можете ограничить скорость обратного прокси.

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Интеграция генерации изображений OpenAI в приложение .NET


https://weblog.west-wind.com/posts/2023/Dec/21/Integrating-OpenAI-image-generation-into-your-NET-Application

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Appcopier

Программа на C#, которая позволяет создавать резервные копии и восстанавливать наиболее важные параметры и настройки Windows в автономном режиме и локально.

Github

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Антипаттерны архитектуры

Откройте для себя распространенные антишаблоны архитектуры, узнайте, как их избегать и преодолевать "подводные камни" проектирования!

Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным. В отличие от шаблона проектирования, рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации.

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

Проект
Github

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Используете ли вы чистые SQL-запросы в Entity Framework?

EF Core и SQL
В EF8 чистые SQL-запросы могут возвращать любой тип без необходимости включать его в модель EF.

Можно запрашивать несопоставленные типы с помощью методов SqlQuery и SqlQueryRaw.

Метод SqlQuery использует интерполяцию строк для параметризации запроса
, при этом вам не нужно создавать новые сущности в вашей модели данных.

Вот 4-минутное руководство по работе с запросами.

@csharp_1001_notes
⚡️ Дорожная карта разработчиков .NET/C# в 2024 году для начинающих

https://uproger.com/dorozhnaya-karta-razrabotchikov-net-v-2024-godu-dlya-nachinayushhih/

@csharp_1001_notes
🖥 CQRS — это стиль архитектуры, в котором операции чтения отделены от операций записи. Подход сформулировал Грег Янг на основе принципа CQS, предложенного Бертраном Мейером. Чаще всего (но не всегда) CQRS реализуется в ограниченных контекстах (bounded context) приложений, проектируемых на основе DDD. Одна из естественных причин развития CQRS — не симметричное распределение нагрузки и сложности бизнес-логики на read и write — подсистемы Большинство бизнес-правил и сложных проверок находится во write — подсистеме. При этом читают данные зачастую в разы чаще, чем изменяют.

Не смотря на простоту концепции, детали реализации CQRS могут значительно отличаться. И это именно тот случай, когда дьявол кроется в деталях.

Самая большое заблуждение о CQRS:

- Вам нужны отдельные базы данных для чтения и записи .

Правда в том, что вы можете иметь одну базу данных при использовании CQRS.

Вот что на самом деле представляет собой CQRS:

https://www.milanjovanovic.tech/blog/cqrs-pattern-with-mediatr

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Несколько интересных способов создания PDF-файлов в .NET.

https://www.milanjovanovic.tech/blog/how-to-easily-create-pdf-documents-in-aspnetcore

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вот быстрый и простой способ добавить вход и регистрацию в бэкенд https://ASP.NET Core:

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
Aspir8 (aspire для Kubernetes) поддерживает создание файла docker compose из манифеста aspire!

https://prom3theu5.github.io/aspirational-manifests/getting-started.html

@csharp_1001_notes
Улучшение производительности JsonSerializer в .NET 8

В .NET 8 делегаты быстрого пути сериализации используются во многих местах.

Посмотрите на цифры на скриншоте 🚀

https://github.com/dotnet/runtime/pull/78646

@csharp_1001_notes
Forwarded from Just Xor
🖥 Введение в антипаттерн Generic Repository Pattern на C#

Generic Repository это антипаттерн. Не существует определенных правил каким должен быть интерфейс репозитория - это всецело зависит от предметной области.

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

Читать подробно

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
Обработчики исключений с пользовательской фильтрацией в C#

Они позволяют нам добавлять условия в блоки catch, чтобы исключения не выводились только на основе типа исключения.

Я использую их лишь изредка, но предпочитаю их операторам if/else внутри блока catch.

@csharp_1001_notes
🖥 Microsoft Office’s RTC (Real-Time Channel) migration to modern .NET

Блог о переходе Microsoft Office с RTC (Real-Time Channel) на современный .NET!

Это было одно из самых первых применений SignalR в компании!

#dotnet #aspnetcore #signalr

https://devblogs.microsoft.com/dotnet/office-rtc-dotnet-migration/

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥Делегирующие обработчики - это как промежуточное программное обеспечение (middleware) https://ASP.NET Core.

C помощью делегирующих обработчиков можно решить множество проблем:

- Протоколирование
- Трассировка
- Валидация
- Аутентификация
- Авторизация

https://dotnet.microsoft.com/en-us/apps/aspnet

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM