Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.24K photos
35 videos
85 files
4.41K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💡 Погружение в open-source .NET

.NET Foundation — некоммерческая организация, изначально созданная Microsoft для поддержки и развития открытого исходного кода в экосистеме .NET. Фонд помогает своим членам находить проекты с открытым исходным кодом для работы и содействует митапам в распространении знаний о .NET.

Почему стоит вносить вклад в проекты с открытым исходным кодом на .NET?

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

Нетворкинг: сотрудничество с мейнтейнерами и участниками позволит устанавливать связи с другими разработчиками со всего мира.

Карьера: вклады в открытый исходный код являются ценным дополнением к резюме и демонстрируют мотивацию и страсть потенциальным работодателям.

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

Как найти подходящий проект

1️⃣ Посетите каталог проектов .NET Foundation, чтобы увидеть список поддерживаемых проектов. Многие из них дружелюбны к новичкам и приветствуют новых участников.

2️⃣ На GitHub проекты часто помечают задачи, подходящие для новичков, такими метками, как good first issue, help wanted или documentation.

3️⃣ Многие проекты имеют серверы Discord, форумы или обсуждения на GitHub, где можно задавать вопросы и получать рекомендации.

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4😁41
⚙️ Wolverine вместо MediatR

MediatR давно стал стандартным решением для обработки команд и событий в .NET-приложениях. Однако его использование требует явной регистрации обработчиков и ведет к шаблонному коду.

Wolverine предлагает альтернативный подход, снижая количество повторяющихся конструкций и обеспечивая встроенную поддержку очередей сообщений.

Wolverine – это библиотека для работы с CQRS и асинхронными процессами, которая:

Упрощает код – обработчики регистрируются автоматически.

Включает встроенную поддержку очередей сообщений без внешних брокеров.

Поддерживает middleware для дополнительной гибкости.

Пример миграции:

MediatR:
public class MyCommandHandler : IRequestHandler<MyCommand, Response>
{
public async Task<Response> Handle(MyCommand request, CancellationToken cancellationToken)
{
// Логика обработки
}
}


Wolverine:
public static Response Handle(MyCommand command)
{
// Логика обработки
}


📎 Полный разбор и примеры – в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍195
👋 Привет, шарписты!

Как вы относитесь к комментариям в коде с объяснением изменений?
// здесь подредачил текст и удалил ненужное вчера
Считаете пережитком прошлого, боитесь забыть что было изменено или просто делаете как делают все у вас на проекте?

Пишите своё мнение в комментарии👇

🐸Библиотека шарписта #интерактив
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤔2
️ Если вы вдруг забыли: у нас можно купить рекламу

Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:

• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps

• 25 000 daily active users на сайте, который поможет усилить продвижение

• Возможность сделать нативную интеграцию, виральный пост и не только

За айтишной аудиторией — к нам 😏

По вопросам рекламы пишите сюда → @proglib_adv
🥱92🌚1
🧑‍💻 Почему код может «завидовать»

➡️ Функциональная зависть — это термин из области программирования, описывающий ситуацию, когда метод одного класса чрезмерно использует данные или методы другого класса, вместо того чтобы оперировать собственными данными.

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

Пример:

Предположим, у нас есть класс Order и класс Customer. Если метод класса Order постоянно обращается к данным класса Customer для выполнения своих задач, это может свидетельствовать о функциональной зависти.

Для устранения функциональной зависти рекомендуется переместить соответствующие методы в тот класс, чьи данные они используют чаще всего. В нашем примере, если метод из Order активно использует данные Customer, возможно, этот метод следует переместить в класс Customer.

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7👍3❤‍🔥2
☢️ Как не попасть в токсичную компанию: чек-лист для айтишника

C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.

Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?

Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.

👉 Читать статью
😁91👍1🌚1
🔐 AES-шифрование в C#

Advanced Encryption Standard — широко используемый алгоритм симметричного шифрования, применяемый в различных приложениях и сервисах для защиты конфиденциальных данных.

В C# AES реализуется с помощью встроенного пространства имен System.Security.Cryptography, что позволяет шифровать и расшифровывать данные без использования сторонних библиотек.

💡 Как работает AES

Алгоритм основан на подстановке, перестановке и множественных раундах преобразования. Используется ключ фиксированной длины: 128, 192 или 256 бит; и вектор инициализации.

Шифрование и дешифрование выполняются с использованием режимов работы:

• CBC: Cipher Block Chaining – стандартный режим.

• GCM: Galois/Counter Mode – безопасный вариант, обеспечивающий аутентификацию данных.

🖇 Примеры реализации советуем посмотреть в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
20🔥4👍1
✌️🤖 Как обмануть робота: 9 инструментов для прохождения системы автоматической фильтрации резюме

Многие компании используют системы автоматического отбора резюме (ATS). Это фильтрует заявки по ключевым словам и формату, из-за чего даже подходящие кандидаты будут «отброшены».

Работу получают те, кто знает, как работает система.

➡️ Подробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📚 ТОП-11 книг по базам данных в 2025 году

Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.

🔗 Читайте в статье
👍5🔥2🥱1
🧑‍💻 Венгерская нотация в C#

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

Программисты на C использовали обозначения вроде «sz» для строк с завершающим нулём, «i» для индексов, «dw» для 32-битных числовых значений.

В C# необходимость в указании типа в имени переменной стоит менее остро благодаря строгой статической типизации и поддержке интеллектуальных функций IDE.

Примеры:

szMessage
Префикс «sz» означает строку, заканчивающуюся нулевым символом (zero-terminated string).

bIsReady
Префикс «b» обозначает логический тип (boolean), а остальная часть имени описывает назначение переменной.

pData
Префикс «p» указывает, что переменная является указателем (pointer).

m_strName
Здесь «m_» означает, что переменная является полем (member) класса, а «str» – строкового типа (string)

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱29👍9🥰4🤔2🤩2
🆚 System.Text.Json против Newtonsoft.Json

Если вам нужна максимальная производительность и низкое потребление памяти, а ваш проект работает на современных версиях .NET (особенно в ASP.NET или Blazor), выбирайте System.Text.Json.

Если же вам важны расширенные возможности – динамическая работа с JSON, поддержка JObject, гибкие настройки сериализации и удобные атрибуты, или если ваш проект уже использует Newtonsoft.Json, лучше оставить его

➡️ Подробное сравнение с примерами кода

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚡️ Скачивание больших файлов в ASP.NET MVC

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

❗️ Основные проблемы при скачивании больших файлов:

• Перегрузка памяти (OutOfMemoryException) если файл загружается полностью в память перед отправкой.

• Высокая нагрузка на сервер при одновременной загрузке большого числа файлов.

• Медленная передача данных без использования потоковой передачи.

Как правильно скачивать файлы

Используем FileStreamResult, который позволяет передавать файл через поток:
public ActionResult DownloadLargeFile()
{
string filePath = Server.MapPath("~/App_Data/LargeFile.zip");
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

return new FileStreamResult(fs, "application/octet-stream")
{
FileDownloadName = "LargeFile.zip"
};
}


➡️ Подробнее о других методах в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤩9
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
1🌚1
🔒 JWT и OAuth для защиты API в .NET

Открытые уязвимости могут привести к утечке данных, взлому системы или несанкционированному доступу. Разберём ключевые методы защиты API в .NET

1️⃣ JWT: безопасная аутентификация с токенами

Один из самых популярных способов авторизации – это JSON Web Token. Токен создаётся сервером после успешного входа пользователя и передаётся клиенту. При каждом запросе клиент отправляет этот токен в заголовке, а сервер проверяет его подлинность.

Чтобы сделать JWT безопасным, важно установить короткий срок действия токена и использовать обновляемые refresh-токены. Также стоит подписывать токены с надёжным ключом, а при необходимости применять асимметричное шифрование.

2️⃣ OAuth: делегированный доступ без передачи пароля

OAuth 2.0 — это способ предоставить доступ к данным без передачи логина и пароля. Приложение получает токен доступа, а не сами учётные данные пользователя.

Для мобильных приложений обязательно нужно использовать PKCE (Proof Key for Code Exchange), чтобы предотвратить перехват кода авторизации. А ещё не стоит выдавать токен с бессрочным сроком действия, иначе это может привести к утечкам.

📎 Лучшие практики защиты API в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍4
📊 Мониторинг .NET приложений

Grafana + Prometheus – это мощное решение для сбора и визуализации метрик, а с Docker его настройка становится еще проще.

Как настроить мониторинг?


1️⃣ Настраиваем Prometheus – это инструмент для сбора метрик. Он периодически опрашивает эндпоинты приложения и сохраняет данные.
global:
scrape_interval: 5s # Интервал опроса метрик

scrape_configs:
- job_name: 'dotnet_app'
metrics_path: '/metrics' # Эндпоинт, откуда брать метрики
static_configs:
- targets: ['host.docker.internal:5000'] # Адрес .NET приложения


2️⃣ Запускаем Grafana — она подключается к Prometheus и строит дашборды с данными о загрузке CPU, памяти и запросах.

3️⃣ Используем Docker Compose — с его помощью развернём оба сервиса одной командой.

📎 Подробное руководство в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
🚀 Обновленный CodeBehind

Вышел CodeBehind 4.0, который добавляет новые возможности для удобного разделения логики и разметки в Blazor.

Основные изменения:

Обновленный BlazorComponentBase — улучшена поддержка жизненного цикла компонентов.

Удобный Dependency Injection — сервисы передаются напрямую в код-бихайнды.

Source Generators — автоматическая генерация кода для снижения рутины.

Гибкая обработка событий — больше контроля и возможностей.

Автоматическая синхронизация состояний — меньше бойлерплейта.

➡️ Подробный обзор обновления

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62👾1
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ SQL-конструктор для .NET

KnightMoves.SqlObjects: объектно-ориентированный SQL-конструктор для .NET, который позволяет писать запросы максимально близко к чистому SQL, но с удобством C#.

Как это работает

Вместо строкового SQL-запроса создаются объекты, которые позволяют собирать SQL-инструкции интуитивно:
using KnightMoves.SqlObjects;

var sql = TSQL
.SELECT()
.STAR()
.FROM("Products")
.Build();

Console.WriteLine(sql);


В итоге получится запрос:
SELECT * FROM Products;


➡️ Документация библиотеки

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38🤔10😢5👏2🥱2