🛠 Чек-лист по настройке и ведению репозитория .NET-проекта
Составили для вас чек-лист для организации репозитория .NET-проекта. Получился мини-гайд, который можно скинуть джуну.
✅ Проверьте URL репозитория
• Убедитесь, что имя аккаунта, название репозитория и основная ветка (main или master) соответствуют соглашениям команды.
• Проверьте, нет ли опечаток или лишних символов в пути.
✅ Добавьте файл LICENSE
• Поместите в корень проекта файл с лицензией (MIT, Apache, GPL и т. д.).
• Проверьте, что текст лицензии актуален и соответствует требованиям компании.
✅ Настройте .gitignore
• Используйте готовые шаблоны для .NET (VisualStudio, Rider): исключите bin/, obj/, настройки IDE, файлы сборки.
• При необходимости добавьте игнорацию пользовательских секретов и сертификатов.
✅ Создайте файл .gitattributes
Задайте нормализацию переводов строк:
• Укажите специальные правила для бинарных файлов, чтобы избежать проблем с кодировкой.
✅ Подробный README.md
• Опишите назначение проекта, его архитектуру и ключевые зависимости.
• Дайте инструкции по установке, настройке и запуску (команды CLI, порты, переменные окружения).
• Приведите пример запуска основных сценариев.
✅ Проект тестов
• Создайте отдельный тестовый проект (.Tests) и убедитесь, что все тесты проходят при команде
• Добавьте в README badge с процентом покрытия (например, через Coveralls или Azure Pipelines).
✅ CI/CD через GitHub Actions
• Разместите workflow в .github/workflows/ci.yml: сборка, тесты, анализ кода.
• Опционально — настройте деплой на тестовый или продакшен-стенд.
✅ Файлы CODE_OF_CONDUCT.md и CONTRIBUTING.md
• CODE_OF_CONDUCT.md определяет правила поведения участников.
• CONTRIBUTING.md описывает, как создавать issue, форкать проект и оформлять PR.
✅ Метки и темы
• Настройте лейблы для Issue/PR: bug, enhancement, help wanted, good first issue.
• Добавьте в репозиторий релевантные темы (например, csharp, dotnet-core, webapi).
✅ Badge-значки в README
• Статус сборки (Build Passing/Failing).
• Процент покрытия тестами.
• Поддерживаемые версии .NET.
Сколько «галочек» из списка содержит ваш проект?
🐸 Библиотека шарписта #буст
Составили для вас чек-лист для организации репозитория .NET-проекта. Получился мини-гайд, который можно скинуть джуну.
• Убедитесь, что имя аккаунта, название репозитория и основная ветка (main или master) соответствуют соглашениям команды.
• Проверьте, нет ли опечаток или лишних символов в пути.
• Поместите в корень проекта файл с лицензией (MIT, Apache, GPL и т. д.).
• Проверьте, что текст лицензии актуален и соответствует требованиям компании.
• Используйте готовые шаблоны для .NET (VisualStudio, Rider): исключите bin/, obj/, настройки IDE, файлы сборки.
• При необходимости добавьте игнорацию пользовательских секретов и сертификатов.
bin/
obj/
*.user
*.suo
Задайте нормализацию переводов строк:
* text=auto
*.ps1 text eol=crlf
• Укажите специальные правила для бинарных файлов, чтобы избежать проблем с кодировкой.
• Опишите назначение проекта, его архитектуру и ключевые зависимости.
• Дайте инструкции по установке, настройке и запуску (команды CLI, порты, переменные окружения).
• Приведите пример запуска основных сценариев.
• Создайте отдельный тестовый проект (.Tests) и убедитесь, что все тесты проходят при команде
dotnet test
.• Добавьте в README badge с процентом покрытия (например, через Coveralls или Azure Pipelines).
• Разместите workflow в .github/workflows/ci.yml: сборка, тесты, анализ кода.
• Опционально — настройте деплой на тестовый или продакшен-стенд.
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with: { dotnet-version: '7.0.x' }
- run: dotnet build --no-restore
- run: dotnet test --no-build --verbosity normal
• CODE_OF_CONDUCT.md определяет правила поведения участников.
• CONTRIBUTING.md описывает, как создавать issue, форкать проект и оформлять PR.
• Настройте лейблы для Issue/PR: bug, enhancement, help wanted, good first issue.
• Добавьте в репозиторий релевантные темы (например, csharp, dotnet-core, webapi).
• Статус сборки (Build Passing/Failing).
• Процент покрытия тестами.
• Поддерживаемые версии .NET.
Сколько «галочек» из списка содержит ваш проект?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9❤8👍4🔥1
Когда речь заходит о техническом долге, и джуны, и опытные разработчики нередко сомневаются, с чего начать и как приоритизировать задачи.
Один из наших подписчиков недавно спросил:
Как определить, когда стоит принимать новый функционал, а когда — гасить технический долг
На практике подход к техдолгу зависит от контекста проекта, команды и бизнес-целей. Вот основные моменты, которые помогут выбрать стратегию:
— Регулярно формируйте список всех известных проблем: устаревшие библиотеки, неочищенный код, отсутствие тестов.
— Делите техдолг на «осознанный» (trade-off ради скорости) и «неосознанный» (ошибки, хаотичный рост).
— Используйте метрики: время на исправление багов, количество инцидентов, сложность новых фич.
— Включайте небольшие задачи по техдолгу в каждый спринт (например, 10–20 % времени).
— Установите критерии «не допуска к продакшену» для новых заимствований (например, доля покрытия тестами).
💬 Как вы балансируете новые фичи и погашение техдолга? Поделитесь своим опытом в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
В рамках трансляции On .NET Live ведущие разобрали, как через чёткие интерфейсы Repository и паттерн Specification вынести всю логику запросов из бизнес-слоя, чтобы не забирать в память лишние данные и легко мокировать код для тестов.
Также обсудили компромиссы generic-репозиториев и показали, как Unit of Work возвращает настоящую транзакционность, вызывая
SaveChanges()
один раз в конце.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🥱3😁1
😤 Пока вы думаете — остальные уже учатся строить системы, которые работают за них
⚡24 часа до старта курса по AI-агентам. Самое время задуматься о прокачке скиллов, потому что места ограничены!
Если вы до сих пор думаете, что LLM — это просто «вызов через API», то вы рискуете очень скоро оказаться за бортом индустрии.
Модели больше не в центре. Решают те, кто умеет собирать интеллектуальные системы, а не просто «дообучать модельку».
➡️ Что вы потеряете, если не впишетесь:
— навык, который уже востребован на рынке
— понимание, как из GPT сделать полноценного помощника, агента или продукт
— шанс догнать тех, кто уже перешёл на следующий уровень
📌 Курс стартует уже завтра
— 5 вебинаров, живая практика, код, разборы, продовые кейсы
— без «посмотрите статью», только то, что реально нужно
Спикеры: Никита Зелинский (МТС), Диана Павликова, Макс Пташник, Дима Фомин — те, кто реально собирает агентные системы, а не просто про них пишет.
❗Старт уже завтра — забронируйте место на курсе сейчас
⚡24 часа до старта курса по AI-агентам. Самое время задуматься о прокачке скиллов, потому что места ограничены!
Если вы до сих пор думаете, что LLM — это просто «вызов через API», то вы рискуете очень скоро оказаться за бортом индустрии.
Модели больше не в центре. Решают те, кто умеет собирать интеллектуальные системы, а не просто «дообучать модельку».
➡️ Что вы потеряете, если не впишетесь:
— навык, который уже востребован на рынке
— понимание, как из GPT сделать полноценного помощника, агента или продукт
— шанс догнать тех, кто уже перешёл на следующий уровень
📌 Курс стартует уже завтра
— 5 вебинаров, живая практика, код, разборы, продовые кейсы
— без «посмотрите статью», только то, что реально нужно
Спикеры: Никита Зелинский (МТС), Диана Павликова, Макс Пташник, Дима Фомин — те, кто реально собирает агентные системы, а не просто про них пишет.
❗Старт уже завтра — забронируйте место на курсе сейчас
🥱9❤1😁1
Теперь разработчики могут генерировать альтернативный текст для изображений прямо в своем приложении.
Вместо того чтобы отправлять запросы в облачные сервисы, можно использовать локально размещенные модели, например Ollama.
Для этого достаточно запустить простой скрипт на C#, который анализирует изображение и генерирует для него текстовое описание.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36
var
в C# — удобство или маскаС появлением ключевого слова
var
нам дали возможность уменьшить количество шаблонного кода и писать более компактные выражения.Вместо явного написания громоздких типов можно писать лаконичный код:
// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData();
Также
var
не делает переменную динамической, это всё тот же строго типизируемый код.Но есть и сильный аргумент против использования
var
. На примере кода выше:// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData(); // каков тип data? int, string, CustomType?
Тип, получаемый из функции неочевиден и это в разы ухудшает читаемость кода.
var
— полезный инструмент, но требует дисциплины. При очевидном типе он упрощает код, при неочевидном — мешает пониманию.var
в коде или сторонник явного? Делитесь мыслями в комментариях 👇Please open Telegram to view this post
VIEW IN TELEGRAM
🌚10💯7❤3😢2🤩2
Несколько интересных материалов, которые вы могли пропустить.
— Фильтрация, сортировка и пагинация в .NET
От инициализации проекта и установки пакета Sieve до настройки DI и написания контроллера с автоматическим применением фильтров и сортировок.
— Каналы не подходят для In-Memory шины сообщений
Использование каналов в качестве шины сообщений может завести в тупик: отсутствие персистентности приводит к необходимости самому реализовывать dead-letter очереди, экспоненциальные откладывания для повторов, механизмы отложенной доставки и «claim-check» для тяжёлых полезных нагрузок.
— Запуск коммерческих изданий AutoMapper и MediatR
В обновлённых релизах AutoMapper v15.0 и MediatR v13.0 на NuGet реализован запрос лицензии при установке.
Помимо тарификации по размеру команды и скидок за годовую подписку, подписчики получают приоритетную поддержку, ранний доступ к выпускам и частные каналы в Discord.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1🔥1
С# Senior Backend Developer — от 250 000 ₽, удалёнка.
C# программист — до 160 000 ₽, гибрид (Москва).
Fullstack Middle C# Developer— до 500 000₽, офис (Москва).
Руководитель группы C# — от 450 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🚀 Анализ изменений с
Команда
Просмотр истории:
История коммитов построчно:
Граф веток + метки (ветки, теги) для всех веток:
Показать diff последних двух коммитов:
Коммиты за последние 2 недели от указанного автора:
Настраиваемый формат: короткий хеш, дата, сообщение, автор:
💬 Вы смотрите историю
🐸 Библиотека шарписта #буст
git log
Команда
git log
позволяет понять, как эволюционировал код — просмотреть последовательность коммитов и метаданные.Просмотр истории:
git log
История коммитов построчно:
git log --oneline
Граф веток + метки (ветки, теги) для всех веток:
git log --graph --decorate --all
Показать diff последних двух коммитов:
git log -p -2
Коммиты за последние 2 недели от указанного автора:
git log --since="2 weeks ago" --author="ProgLib"
Настраиваемый формат: короткий хеш, дата, сообщение, автор:
git log --pretty=format:"%h %ad | %s%d [%an]" --date=short
💬 Вы смотрите историю
log
'ом или используете сторонние инструменты?Please open Telegram to view this post
VIEW IN TELEGRAM
🥰7❤2
В условиях жесткой конкуренции выделиться непросто, но возможно. В статье собрали 9 проверенных способов, которые помогут вам грамотно оформить резюме и выделить свои сильные стороны.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👾3
Асинхронные потоки
IAsyncEnumerable
позволяют эффективно обрабатывать последовательности данных, поступающих с задержками. В целом это положительно влияет на пользовательский опыт и скорость работы приложения1. Базовый синтаксис:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
static async IAsyncEnumerable<int> GenerateSequenceAsync(int count, [EnumeratorCancellation] CancellationToken token = default)
{
for (int i = 0; i < count; i++)
{
// Симулируем асинхронную задержку
await Task.Delay(100, token);
yield return i;
}
}
static async Task ConsumeAsync()
{
await foreach (var item in GenerateSequenceAsync(5))
{
Console.WriteLine($"Получено значение: {item}");
}
}
• Ключевое слово
async
перед IAsyncEnumerable<T>
.•
yield return
внутри асинхронного метода.•
await foreach
для потребления.2. Обработка отмены и ошибок:
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1));
try
{
await foreach (var item in GenerateSequenceAsync(10, cts.Token).WithCancellation(cts.Token))
{
Console.WriteLine(item);
}
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция была отменена.");
}
• Передаём
CancellationToken
через атрибут [EnumeratorCancellation]
.• Используем метод расширения
.WithCancellation(token)
для явной поддержки отмены в await foreach
.3. Советы по применению
• Всегда учитывайте семантику отмены: пробрасывайте
CancellationToken
до источника потока.• Избегайте долгих синхронных операций внутри цикла генерации — это сведёт на нет преимущества асинхронности.
• При больших объёмах данных комбинируйте с буферизацией через
Channel<T>
для сглаживания пиковой нагрузки.💬 Нужны более продвинутые сценарии по использованию асинхронности? Пишите свои хотелки в комментариях, а мы их обязательно исполним 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🔥1😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31😁9💯7🥱1👾1
✏️ Промпт для пет-проектов
Мы составили для вас промпт, который поможет выбрать идею для вашего следующего пет-проекта. Никаких долгих раздумий, используете промпт и к разработке.
Промпт:
Это отличный способ не только генерировать идеи, но и подойти к созданию чего-то нового нестандартным способом.
Занимаетесь пет проектами? Поставьте 👍, если да и 👾, если нет.
🐸 Библиотека шарписта #буст
Мы составили для вас промпт, который поможет выбрать идею для вашего следующего пет-проекта. Никаких долгих раздумий, используете промпт и к разработке.
Промпт:
You are a fun-loving and creative C# developer, brimming with enthusiasm for coding and always eager to explore new and exciting projects. Your goal is to brainstorm a list of engaging and manageable pet-project ideas that leverage your C# skills. These projects should be fun to build, relatively self-contained, and offer opportunities for learning and experimentation. Finally, you will choose the most appealing project and outline the initial steps for getting started.
Это отличный способ не только генерировать идеи, но и подойти к созданию чего-то нового нестандартным способом.
Занимаетесь пет проектами? Поставьте 👍, если да и 👾, если нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👾9❤3😁2🌚1
Не все аспекты программирования идут на пользу при реальной работе. Часто избыточные знания только мешают трезво оценить и написать фичу.
Вот что думает наш админ:
Когда я начинал, мне рассказали, что многозадачность — это ключ к быстродействующим приложениям, и я потратил кучу времени, изучая все тонкости асинхронности. В итоге понял, что в реальных проектах асинхронность скорее игрушка, чем нужный инструмент.
💬 Есть ли у вас знания, которые так и не пригодились в работе? Делитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🌚4🤔3🥱3😢1
Иногда нам нужно на примере узнать как отработает LINQ запрос, к примеру.
Можно пойти старым путём и создать отдельный файл в проекте с названием «Test123», но Rider предлагает иной вариант.
Если Rider у вас настроен под хоткеи от Intellij, то достаточно одновременно нажать:
Ctrl + Alt + Shift + Insert
И IDE создаст вам временный файл, который не будет добавлен в контекст проекта.
Просто, быстро и без боли.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤔5❤2🔥2
📁 Файл с инструкциями вместо тысячи запросов
Представьте: один файлик — и все последующие автодополнения подстраиваются под ваш корпоративный стандарт.
В блоге .NET показали, как создать такой файл и навсегда забыть о рутине при работе с GitHub Copilot.
Создаёте в корне репозитория папку
В шапке указываете, к каким файлам применить правила, а дальше описываете свои стандарты
➡️ Dev блог Microsoft
🐸 Библиотека шарписта #буст
Представьте: один файлик — и все последующие автодополнения подстраиваются под ваш корпоративный стандарт.
В блоге .NET показали, как создать такой файл и навсегда забыть о рутине при работе с GitHub Copilot.
Создаёте в корне репозитория папку
.github/
и внутри неё — copilot-instructions.md
.В шапке указываете, к каким файлам применить правила, а дальше описываете свои стандарты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🌚3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁41💯9
Отвлечёмся от работы, но не совсем. Сегодня будем отгадывать термины из разработки.
1. Специальный оператор, возвращающий имя переменной, метода или типа как строку.
2. Модификатор метода, обозначающий его асинхронное выполнение в сочетании с await.
3. Специальный член класса, позволяющий обращаться к экземпляру как к массиву: obj[i].
4. Модификатор, позволяющий объявить один класс/метод/структуру в нескольких файлах.
5. Ключевое слово, позволяющее из метода-итератора возвращать значения по одному.
6. Модификатор поля, гарантирующий свежесть данных при многопоточном доступе.
7. Контекст или модификатор, разрешающий небезопасный (низкоуровневый) код с указателями.
Пишите под спойлер свои варианты в комментариях 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👾2🌚1