C# (C Sharp) programming
18.8K subscribers
729 photos
37 videos
8 files
657 links
По всем вопросам- @haarrp

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

@ai_machinelearning_big_data - Machine learning

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

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

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
加入频道
🦠 Как писать код так, чтобы open-source проект рос сам по себе (как колония бактерий)

Неожиданный, но полезный принцип: код стоит писать как бактерии пишут ДНК.
Звучит странно, но у природы за миллиарды лет выработался стиль, который идеально подходит для быстрого роста и масштабирования. И он отлично ложится на open-source.

Что делает "бактериальный код" особенным:

– Он маленький — потому что каждая строка «стоит энергии»
– Он модульный — код разбит на независимые блоки (как опероны в генах)
– Он самодостаточный — кусок кода можно просто скопировать и вставить в другой проект, без зависимостей

Теперь представьте, что ваш код читают как библиотеку сниппетов.
Можно ли выдернуть одну функцию — и она сразу принесёт пользу?
Можно ли вставить ваш класс в чужой проект — и он просто заработает?

Если да, значит код "бактериальный" — и это хорошо.

Почему это работает:
Такой код легко распространяется, переиспользуется, адаптируется. Люди могут взять только нужное, не вникая в архитектуру всего проекта. И это ключ к живому open-source: когда код «живет отдельно от автора».

Теперь про монорепы.
Сложные проекты всё равно требуют структуры — как организм требует согласованной работы органов.
Это уже стиль "эукариот" — более крупный, связанный, менее гибкий, но подходящий для системного масштаба.

Вывод:
Хочешь сложную платформу — строй "монорепу".
Хочешь, чтобы твой open-source проект рос, развивался и жил без тебя — пиши код как бактерии:
маленько, модульно, автономно, копируемо.

Это стиль, который колонизировал всё: от термальных источников до вакуума в космосе. И он работает.

▶️ Оригинал пост от Karpathy

#opensource #кодстиль #cleanCode #dev #community #softwaredesign
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 NetCoreDbg — отладчик .NET Core с поддержкой GDB и VSCode. Этот проект от Samsung предлагает альтернативный отладчик для .NET Core-приложений, который понимает как протокол GDB/MI, так и VSCode Debug Adapter Protocol. Особенно полезен для кросс-платформенной разработки — работает на Linux, Windows, macOS и даже экзотических архитектурах вроде RISC-V.

При сборке вместо традиционных решений на C++ здесь используется связка CMake и .NET SDK. А поддержка режима Interop позволяет отлаживать смешанный код (C# + нативные библиотеки) на Tizen и Linux.

🤖 GitHub

@csharp_ci
🍫 Hot Chocolate + GraphQL + .NET: Быстрый старт

Если ты хочешь использовать GraphQL в .NET‑проектах — обрати внимание на Hot Chocolate от ChilliCream. Это мощный, удобный и активно развиваемый GraphQL-сервер для .NET.

📎 Полный гайд: [antondevtips.com/blog/getting-started-with-hot-chocolate-graphql](https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql)

⚙️ Шаг 1: Установка

Создай новый ASP.NET Core проект:


dotnet new web -n Demo
cd Demo
dotnet add package HotChocolate.AspNetCore


🧱 Шаг 2: Настройка GraphQL
В файле Program.cs добавь следующее:


var builder = WebApplication.CreateBuilder(args);

builder.Services
.AddGraphQLServer()
.AddQueryType<Query>();

var app = builder.Build();

app.MapGraphQL();
app.Run();

Создай класс Query.cs:



public class Query
{
public Book GetBook() => new Book
{
Title = "C# in Depth",
Author = new Author { Name = "Jon Skeet" }
};
}


И добавь модели:


public class Book
{
public string Title { get; set; }
public Author Author { get; set; }
}

public class Author
{
public string Name { get; set; }
}


📬 Шаг 3: Запрос в браузере
Открой http://localhost:5000/graphql и выполни GraphQL-запрос:



{
book {
title
author {
name
}
}
}

🧠 Почему стоит выбирать Hot Chocolate?

- Поддержка annotation-based, code-first и schema-first подходов

- Отличная интеграция с EF Core

- Встроенная фильтрация, сортировка, пагинация, DataLoader

- Поддержка подписок (Subscriptions)

- Интерактивная IDE: Banana Cake Pop

📌 Полезные советы
Для продакшена отключи Banana Cake Pop, GET-запросы и интроспекцию

Используй .AddMutationType, .AddSubscriptionType, .AddFiltering, .AddSorting для расширения схемы

🚀 Полный гайд

Hot Chocolate — это простой способ внедрить GraphQL в .NET. Он удобен в настройке, гибкий в использовании и подходит для проектов любого масштаба.
🔌 WireMock.Net — мок-сервер для .NET-разработчиков. Этот порт популярного Java-инструмента WireMock позволяет тестировать HTTP-зависимости без реальных внешних сервисов. Проект поддерживает сложные сценарии: от стабов с шаблонами Handlebars до stateful-поведения и записи/воспроизведения запросов.

Мок-сервер можно запускать в разных режимах, как в памяти для юнит-тестов, так и в виде standalone-процесса, Windows-сервиса или Docker-контейнера. Для CI/CD есть интеграция с Testcontainers и .NET Aspire.

🤖 GitHub

@csharp_ci
This media is not supported in your browser
VIEW IN TELEGRAM
🎮 Свежий Генератор игр для Unity теперь работает по принципу вайб-кодинга — всё делается через промпты прямо в движке.

🛠 Что умеет:
• Генерирует готовые ассеты, скрипты, 3D-модели и локации
• Работает внутри Unity — появляется чат-окно, где ты просто пишешь, что хочешь
• Unity бесплатен — качай и начинай без вложений
• Полно **гайдов на YouTube**, всё понятно за полчаса
• Главное— он реально работает, никаких подписок, всё локально

https://nimblefox.ai/
🧰 Modern — набор инструментов для .NET, упрощающий разработку бэкенда

Modern — это лёгкий и расширяемый фреймворк, с которым можно собрать production-ready приложение всего из моделей и конфигурации. Поддерживает как SQL, так и NoSQL, подходит под разные архитектурные стили.

🔹 Что внутри:

• Универсальные репозитории для SQL и NoSQL
• Сервисы с кэшированием и без
• In-memory-сервисы с фильтрацией
• Кэши на Redis и в памяти
• CQRS-запросы и команды поверх репозиториев
• Готовые контроллеры для всех видов сервисов
• Поддержка OData-контроллеров

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

Github
📂 Microsoft открыла исходный код DocumentDB — нового стандарта NoSQL-баз на основе PostgreSQL

Теперь ядро Cosmos DB (MongoDB API) доступно всем — Microsoft представила DocumentDB, документоориентированную базу данных с открытым исходным кодом. Это серьёзный шаг для open source-сообщества и большой вклад в развитие NoSQL на базе PostgreSQL.

🔧 Что входит в DocumentDB:

▪️ pg_documentdb_core — расширение PostgreSQL с поддержкой BSON, включает:
- индексацию по полям, включая гео и составные
- векторный поиск (AI, NLP, рекомендации)
- аутентификацию SCRAM

▪️ pg_documentdb_api — API-уровень для CRUD-операций, запросов и управления индексами

🐳 Как попробовать:
1. Установите Docker
2. Клонируйте проект:

git clone https://github.com/microsoft/documentdb.git

Соберите и запустите:


docker build . -f .devcontainer/Dockerfile -t documentdb
docker run -v $(pwd):/home/documentdb/code -it documentdb /bin/bash
cd code && make && sudo make install
./scripts/start_oss_server.sh -t documentdb

Подключение:


psql -p 9712 -h localhost -d postgres


🔗 Репозиторий: https://github.com/microsoft/documentdb

DocumentDB — это не просто адаптация под Mongo, а новая точка входа в NoSQL на мощной базе PostgreSQL.
ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2025 ГОДУ? 🚀

Чтобы стать Senior C# разработчиком сегодня, нужно не только знать язык программирования и фреймворки. Нужно уметь строить гибкую архитектуру приложения, которую легко тестировать и менять под задачи бизнеса. Стань экспертом в построении гибкой архитектуры приложения!

👉 Стартуем 14 июля.

Курс ведет действующий архитектор и Principal Engineer Кирилл Ветчинкин.

Что будет на курсе:
Создадим полноценный микросервис
Разберем все тактические паттерны DDD
Реализуем Use Case и Domain Service
Напишем много тестов
Реализуем HTTP, gRPC и Kafka адаптеры

Полная программа ТУТ 👉 https://microarch.ru/courses/ddd?utm_source=posev&utm_medium=erid:2Vtzqwm7tdD&utm_campaign=4

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

А еще:
— Проверим все домашки
— Поддержим в чате
— Проведем живые разборы
— Ответим на все вопросы

🔥 Не откладывай свой рост на потом: https://microarch.ru/courses/ddd?utm_source=posev&utm_medium=erid:2Vtzqwm7tdD&utm_campaign=4

Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqwm7tdD
⚠️ Как вы обрабатываете ошибки в C#?

Многие используют исключения для управления потоком и быстрого фейла. Но в C# метод не сообщает, какие именно исключения он может выбросить — это не видно в сигнатуре.

🔍 Мой подход:
Исключения — только для исключительных ситуаций.

Если метод может ожидаемо провалиться, пусть это будет явно.

Используйте Result-паттерн:

— Метод возвращает Result<T> вместо выбрасывания исключения
— Caller обязан проверить IsSuccess и обработать ошибку
— Код становится предсказуемее и легче тестируется
— Дополнительно: пропускная способность может быть выше, чем при throw/catch

Пример:

Result<User> result = userService.FindById(id);
if (!result.IsSuccess)
return Error(result.Error);


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

⏺️ Приглашаем на открытый урок «Переиспользуемый код на C#: архитектурный подход» 15 июля в 20:00 МСК. Разберём, как строить приложение по принципам SOLID, DRY, KISS и YAGNI и избавляться от дублирования на уровне архитектуры. Вы увидите, как декомпозировать систему на слои, внедрять зависимости через абстракции и собирать «Lego-приложение» для разных интерфейсов.

🔴 Встречаемся 15 июля в 20:00 МСК.

➡️ Успейте зарегистрироваться на урок количество участников ограничено: https://otus.pw/55rM/?erid=2W5zFJJBcuE 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🎯 Хитрая задача на C# для продвинутых

Твоя цель — реализовать ленивую фильтрацию по уникальному ключу без LINQ.

Условие:

Есть класс:


class User
{
public string Name { get; set; }
public int Age { get; set; }
}


Нужно написать метод UniqueBy<T, TKey>, который возвращает только уникальные элементы по ключу. Нельзя использовать LINQ (Distinct, GroupBy и т.д.). Метод должен быть ленивым — использовать yield return.

Пример:


var users = new List<User>
{
new User { Name = "Alice", Age = 30 },
new User { Name = "Bob", Age = 25 },
new User { Name = "Alice", Age = 35 },
new User { Name = "Eve", Age = 25 }
};

foreach (var user in UniqueBy(users, u => u.Name))
{
Console.WriteLine($"{user.Name}, {user.Age}");
}
// Вывод:
// Alice, 30
// Bob, 25
// Eve, 25

🧠 Решение:


public static IEnumerable<T> UniqueBy<T, TKey>(IEnumerable<T> source, Func<T, TKey> keySelector)
{
var seen = new HashSet<TKey>();
foreach (var item in source)
{
var key = keySelector(item);
if (seen.Add(key))
yield return item;
}
}


📌 Чем эта задача интересна:
Требует знания HashSet, yield return и замыканий
Работает с любыми коллекциями и даже бесконечными потоками
Часто нужна при фильтрации API-результатов, логов и UI

Ставь лайк, если хочешь больше таких продвинутых C#-задач.
✂️ Clipper2 — библиотека для работы с полигонами. Этот проект представляет собой современную версию классической библиотеки Clipper, переписанную с нуля для поддержки новых стандартов. Инструмент выполненяет булевые операций (объединение, пересечение, вычитание) над сложными полигональными фигурами, а также их офсетное преобразование.

Библиотека имеет кроссплатформенную поддержку: помимо нативных C++, C#, Delphi-реализаций, доступны адаптации для Java, Kotlin и даже WebAssembly. При этом версия на С# демонстрирует наибольшую производительность, она идеально подходит для задач CAD-систем и GIS-приложений.

🤖 GitHub

@csharp_ci
💎 CSharpier — бескомпромиссный форматтер для C#. Этот инструмент берёт ваш код и переписывает его по своим строгим правилам, вдохновлённым Prettier. Никаких бесконечных настроек, только единый стандарт оформления для всего проекта.

Инструмент интегрируется с редакторами, работает через CLI и даже в CI/CD. Будет особенно удобен для команд, где важна единообразная кодовая база без ручной правки стиля.

🤖 GitHub

@csharp_ci
🎯 Design pattern, который должен знать каждый — Decorator

Один из самых гибких и мощных паттернов — особенно в мире .NET и DI.

Что это такое?
Decorator позволяет обернуть реализацию сервиса в дополнительное поведение — например, логгирование, кэширование или retry-механику — без изменения исходного кода.

Как применить на практике?
В .NET это особенно удобно с библиотекой Scrutor — она расширяет встроенный DI-контейнер и позволяет добавлять декораторы в одну строчку.

Пример:

services.Decorate<IService, LoggingDecorator>();


Зачем это нужно?
— логгировать вызовы без лома архитектуры
— централизованно обрабатывать ошибки
— добавить метрики без влезания в бизнес-логику

📌 Подробнее