Ответ
Мой основной стек — это бэкенд-разработка на .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 работает». Вот так вот, в двух словах.