C# (C Sharp) programming
18.7K subscribers
757 photos
38 videos
8 files
676 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
🖥 Как визуализировать архитектуру программного обеспечения?

Большинство диаграмм архитектуры программного обеспечения, которые я видел, представляют собой полный беспорядок.

Но вы можете использовать модель C4 для стандартизации своих диаграмм.

Это простой и эффективных подход к описанию архитектуры программного обеспечения.

https://www.milanjovanovic.tech/blog/visualize-your-software-architecture-with-the-c4-model

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как применить 𝗖𝗤𝗥𝗦 𝗽𝗮𝘁𝘁𝗲𝗿𝗻 в своей системе?

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

Вот мой подход к его реализации.

Я предпочитаю использовать MediatR - но эта идея прекрасно работает и без него.

MediatR реализует паттерн посредника. Он отделяет внутрипроцессную отправку сообщений от их обработки.

Я расширяю интерфейс MediatR IRequest пользовательской абстракцией ICommand и IQuery.

Это позволяет мне явно определять команды и запросы в системе.

На стороне записи:

- Отправка команды из API с помощью MediatR.
- Богатая доменная модель инкапсулирует бизнес-логику
- EF Core загружает доменные сущности
- Выполнение бизнес-логики
- Сохранить изменения

На стороне чтения:

- Отправка запроса из API с помощью MediatR
- Как можно меньше непрямых связей
- Dapper с необработанными SQL-запросами
- SQL представления и запросы к ним
- EF Core запросы с проекциями

Такое логическое разделение решает специфические требования к чтению и записи.

При обновлении данных мы хотим реализовать сложную бизнес-логику и валидацию.

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

Это стандарт в моих проектах.

Но вы можете адаптировать этот паттерн по своему вкусу.

📌 Почитать подробнее: https://www.milanjovanovic.tech/blog/cqrs-pattern-with-mediatr

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🎓 Применение улучшенной библиотеки локализации в приложениях .NET

В этой статье подробно рассказывается о том, как использовать библиотеку Localize-ME для добавления локализации в приложение .NET.

https://www.thereformedprogrammer.net/applying-an-improved-multiple-languages-library-to-net-applications/

@csharp_ci
🖥 В C# 12 представлены встроенные массивы InlineArray.

Это позволяет создать массив фиксированного размера в виде структуры.

Он обеспечивает производительность, аналогичные небезопасному буферу фиксированного размера.

Эта функция используется разработчиками выполнения для повышения производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Мне нравится использовать паттерн фабрика к определению middleware ASP .NET.

Нужно создать нтерфейс `IMiddleware`, который предоставляет единственный метод.

Пример на картинке.

Существует еще 2 способа создания middleware в .NET.

- Делегаты запросов
- Основанные на соглашениях


Вот как их можно использовать:
https://www.milanjovanovic.tech/blog/3-ways-to-create-middleware-in-asp-net-core

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 C# поддерживает блокировку с помощью оператора `lock`.

С его помощью можно определить блок кода, доступ к которому будет иметь только один поток.

Однако в асинхронном контексте он не работает.

Поэтому придется использовать какой-либо другой примитив параллелизма C#.

- Семафор
- SemaphoreSlim
- Монитор
- Мьютекс

Никогда не знаешь, когда понадобится использовать блокировку в C#.

Вот как инструкция с примерами: https://www.milanjovanovic.tech/blog/introduction-to-locking-and-concurrency-control-in-dotnet-6

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Впечатляющая монолитная архитектура Stack Overflow

Компания Stack Overflow, поддерживает тенденцию развития микросервисов их сервис обрабатывает 1,3 млрд. просмотров страниц в месяц на своих 200 сайтах, используя удивительно эффективную монолитную архитектуру с минимальной инфраструктурой.

Веб-серверы:

- Используется всего 9 локальных веб-серверов IIS.
- Каждый сервер имеет 64 ГБ оперативной памяти и работает на высокооптимизированном коде .NET
- Обработка 450 пиковых запросов в секунду на каждом сервере при использовании всего 12% процессорной мощности
- Код минимизирует потребление памяти и настроен на ограничения сбора мусора

Серверы SQL:

- Организованы в 2 отказоустойчивых кластера по 2 сервера в каждом
- Первый кластер: 1,5 ТБ оперативной памяти на сервер
- Второй кластер: 768 ГБ оперативной памяти на сервер
- Около трети массива данных Q&A находится в памяти.
- Каждый кластер обрабатывает более 10 000 пиковых запросов в секунду при ~15% CPU

Redis:

- Один основной сервер с репликой на 256 ГБ.
- Обработка 60000 пиковых операций в секунду при 2% CPU

Stack Overflow эффективно масштабирует монолитное приложение.

📌 Архитектура наглядно
📌 Подкаст об архитектуре Stack Overflow

@csharp_ci
🖥 Разработка веб-интерфейсов ASP .NET Core с использованием паттерна проектирования Observer

https://www.c-sharpcorner.com/article/asp-net-core-web-api-development-with-observer-design-pattern/


@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Пятничный C# квиз. #ПятничныйКвиз

@csharp_ci
Что выведет на экран этот код?
Anonymous Quiz
32%
1 1 1 1
15%
1.0 1.0 1.0 1.0
9%
1.00 1.00 1.00 1.00
13%
1.000 1.000 1.000 1.000
31%
1 1.0 1.00 1.000
ml.png
3.8 MB
⚡️ Комплексная дорожная карта разработчиков .NET до уровня Сеньора.

Это пошаговое руководство по становлению инженера .NET со ссылками на соответствующие учебные ресурсы.

Github

@csharp_ci
🖥 Dapper - это легковесный объектно-реляционный связующий модуль в .NET.

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

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

Вот наиболее распространенные сценарии работы с маппингом sql:

https://www.milanjovanovic.tech/blog/mastering-dapper-relationship-mappings

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Пятничный С# квиз
#ПятничныйКвиз
Что выведет на экран этот код?
Anonymous Quiz
7%
Base.Foo(int)
64%
Derived.Foo(int)
20%
Derived.Foo(object)
9%
Derived.Foo(int) Base.Foo(int)