Какой стек используешь

Ответ

Мой основной стек — это бэкенд-разработка на .NET (C#) с фокусом на создание масштабируемых и поддерживаемых веб-API и сервисов.

Бэкенд:

  • Платформа: .NET 8+ (ранее .NET Core).
  • Веб-фреймворк: ASP.NET Core (для REST API, gRPC, SignalR).
  • ORM/Работа с данными: Entity Framework Core (для реляционных БД) + Dapper для высоконагруженных операций.
  • Архитектура: Чистая архитектура (Clean Architecture), CQRS/MediatR, Domain-Driven Design (где уместно).

Базы данных и кэширование:

  • Реляционные: PostgreSQL (предпочтительно), SQL Server.
  • Документная БД: MongoDB (для специфичных сценариев).
  • Кэширование: Redis (для сессий, кэша данных, распределенных блокировок).

Фронтенд (если требуется full-stack участие):

  • TypeScript как основной язык.
  • React с современным стэком (Hooks, Zustand/Redux Toolkit, React Query).
  • Для внутренних админ-панелей иногда использую Blazor WASM.

Инфраструктура и DevOps:

  • Контейнеризация: Docker, Docker Compose.
  • Оркестрация: Kubernetes (базовый опыт), чаще управляемые сервисы (Azure Kubernetes Service, AWS EKS).
  • Облака: Azure (App Services, Functions, Service Bus, Cosmos DB) или AWS (EC2, S3, SQS).
  • CI/CD: GitHub Actions, GitLab CI, Azure DevOps Pipelines.
  • Мониторинг и логи: Seq, ELK Stack (Elasticsearch, Logstash, Kibana), Application Insights.

Пример типичного слоя контроллера в моем проекте:

[ApiController]
[Route("api/v1/[controller]")]
[Authorize]
public class ProductsController : ControllerBase
{
    private readonly IMediator _mediator;

    public ProductsController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpGet]
    [ProducesResponseType(typeof(PagedList<ProductDto>), StatusCodes.Status200OK)]
    public async Task<IActionResult> GetProducts([FromQuery] GetProductsQuery query)
    {
        // Использование паттерна CQRS через MediatR
        var result = await _mediator.Send(query);
        return Ok(result);
    }

    [HttpPost]
    [ProducesResponseType(StatusCodes.Status201Created)]
    public async Task<IActionResult> CreateProduct([FromBody] CreateProductCommand command)
    {
        var productId = await _mediator.Send(command);
        return CreatedAtAction(nameof(GetProduct), new { id = productId }, null);
    }
}

Инструменты: Git (GitFlow/Trunk-Based), Visual Studio / Rider, Postman, Swagger/OpenAPI.

Ответ 18+ 🔞

А, ну вот, смотри, мой основной профиль — это бэкенд на .NET (C#), если по-простому. То есть я делаю всякие мозги для сайтов и сервисов, чтобы всё летало и не разваливалось под нагрузкой, как карточный домик от чиха.

По бэкенду:

  • Платформа: .NET 8 и новее, раньше на .NET Core сидел.
  • Веб-фреймворк: ASP.NET Core — это мой хлеб, на нём и API, и gRPC, и SignalR для живых штук.
  • Работа с данными: Entity Framework Core — для всего основного, а когда нужно чтоб прям быстро-быстро, подключаю Dapper, он бензин хавает как не в себя, но зато шустрый.
  • Архитектура: Стараюсь делать по уму — Чистая архитектура, CQRS с MediatR, иногда Domain-Driven Design, если проект не для школьного проекта, а серьёзный.

Базы и кэш:

  • Реляционные: В основном PostgreSQL, он мне больше зашёл, но и с SQL Server работал.
  • Для документов: MongoDB, когда данные такие, что в таблицы их пихать — только портить.
  • Кэширование: Redis, куда ж без него. Сессии, кэш, блокировки — всё туда.

Фронтенд (если припрет и скажут «ну ты же full-stack, сделай и тут»):

  • TypeScript — иначе вообще ни в какую.
  • React со всеми этими современными плюшками: Hooks, Zustand/Redux Toolkit, React Query.
  • Для внутренних админок, бывает, Blazor WASM пускаю в ход — быстро и без лишней возни.

Инфраструктура и DevOps (тут уже ближе к магии):

  • Контейнеры: Docker, Docker Compose — стандарт де-факто.
  • Оркестрация: Kubernetes, базово, но чаще пользуюсь управляемыми штуками от облаков, типа Azure Kubernetes Service.
  • Облака: Azure (App Services, Functions и т.д.) или AWS (EC2, S3) — смотря куда занесёт.
  • CI/CD: GitHub Actions, GitLab CI, Azure DevOps Pipelines — чтобы всё само деплоилось, а не я вручную.
  • Мониторинг и логи: Seq, ELK Stack (Elasticsearch, Logstash, Kibana), Application Insights. Чтобы когда всё ебнулось, понимать, где и почему, а не гадать на кофейной гуще.

Вот, смотри, как у меня обычно контроллер выглядит, чтоб ты понимал масштаб:

[ApiController]
[Route("api/v1/[controller]")]
[Authorize]
public class ProductsController : ControllerBase
{
    private readonly IMediator _mediator;

    public ProductsController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpGet]
    [ProducesResponseType(typeof(PagedList<ProductDto>), StatusCodes.Status200OK)]
    public async Task<IActionResult> GetProducts([FromQuery] GetProductsQuery query)
    {
        // Использование паттерна CQRS через MediatR
        var result = await _mediator.Send(query);
        return Ok(result);
    }

    [HttpPost]
    [ProducesResponseType(StatusCodes.Status201Created)]
    public async Task<IActionResult> CreateProduct([FromBody] CreateProductCommand command)
    {
        var productId = await _mediator.Send(command);
        return CreatedAtAction(nameof(GetProduct), new { id = productId }, null);
    }
}

Инструменты: Git (по GitFlow или Trunk-Based), Visual Studio / Rider (Rider — огонь, кстати), Postman для тестов, Swagger/OpenAPI чтобы фронтендеры не доставали вопросами «а как твой API работает». Вот так вот, в двух словах.