Ответ
Да, неоднократно. Типичный стек для нового проекта включает:
- Backend: ASP.NET Core Web API для RESTful-сервисов или MVC для серверного рендеринга.
- Аутентификация/Авторизация: JWT-токены или Identity Server.
- Доступ к данным: Entity Framework Core (Code-First или Database-First) с репозиториями и Unit of Work.
- Документация API: Интеграция Swagger (Swashbuckle) с XML-комментариями.
- Фронтенд: Для SPA — отдельное приложение на React/Angular/Vue, взаимодействующее с API. Для более простых случаев — Razor Pages или Blazor Server/WASM.
- Инфраструктура: Docker-контейнеризация, развертывание в облаке (Azure/AWS), настройка CI/CD пайплайнов (GitHub Actions, GitLab CI).
Пример контроллера для Web API:
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly IProductService _productService;
public ProductsController(IProductService productService)
{
_productService = productService;
}
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<ProductDto>), StatusCodes.Status200OK)]
public async Task<IActionResult> GetAll()
{
var products = await _productService.GetAllAsync();
return Ok(products);
}
[HttpPost]
[ProducesResponseType(typeof(ProductDto), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Create([FromBody] CreateProductRequest request)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
var createdProduct = await _productService.CreateAsync(request);
return CreatedAtAction(nameof(GetById), new { id = createdProduct.Id }, createdProduct);
}
}
Ключевые практики: разделение ответственности (Controllers -> Services -> Repositories), использование DTO, валидация запросов, корректные HTTP-статусы и обработка ошибок глобально через middleware.