الگوبرداری از معماری موجود و جلوگیری از کدهای ناهمگون با GitHub Copilot
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۰۶
آدرس: www.dntips.ir
Controllers/ Services/ Repositories/ DTOs/ Validators/
کلاسProductControllerرا با الگوبرداری مستقیم از قراردادها و ساختار موجود درCustomerController.csوOrderController.csپیادهسازی کن. الزامات و قراردادهای تحت نظارت:
ActionResult یا TypedResults)namespace MyApp.Api.Controllers;
/// <summary>
/// مدیریت عملیات و واکشی دادههای محصولات.
/// </summary>
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize(Policy = "RequireScopeRead")]
public sealed class ProductsController(
IProductService productService,
ILogger<ProductsController> logger) : ControllerBase
{
/// <summary>
/// دریافت اطلاعات یک محصول بر اساس شناسه منحصربهفرد.
/// </summary>
[HttpGet("{id:guid}")]
[ProducesResponseType(typeof(ProductResponseDto), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
public async Task<ActionResult<ProductResponseDto>> GetByIdAsync(
Guid id,
CancellationToken cancellationToken)
{
logger.LogInformation("Fetching product details for Id: {ProductId}", id);
var result = await productService.GetByIdAsync(id, cancellationToken);
if (result is null)
{
logger.LogWarning("Product with Id {ProductId} not found.", id);
return NotFound(new ProblemDetails
{
Title = "Product Not Found",
Detail = $"No product matches the identifier '{id}'.",
Status = StatusCodes.Status404NotFound
});
}
return Ok(result);
}
}#file: در پنجره Copilot Chat، به جای نوشتن نام فایلها در متن ساده، از متغیرهای زمینهای استفاده کنید: #file:CustomerController.cs #file:ICustomerService.cs Create ProductController using these patternsCustomerValidator.cs) را نیز ضمیمه کنید تا ساختار ProductValidator.cs از همان قواعد ارزیابی (مثل پیامهای خطای سفارشی یا کدهای وضعیت) پیروی کند.@workspace در VS Code به Copilot کمک میکند الگوهای لایهبندی پروژه را به درستی شناسایی کند.