مدیریت دقیق زمینه (Context) با متغیرهای ارجاع # در GitHub Copilot
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۰۸
آدرس: www.dntips.ir
# در محیط Copilot Chat، به شما امکان میدهد تا گراف ارتباطی میان فایلها، ساختارها و اینترفیسهای پروژه را به صورت دقیق و هدفمند برای هوش مصنوعی بازسازی کنید.«آیا این سرویس درست نوشته شده است؟»
(هوش مصنوعی بدون دانستن تایپهای بازگشتی ریپازیتوری یا ساختار مدل پایگاه داده، فقط به بررسی خطاهای نگارشی و سینتکسی بسنده میکند.)
کلاس#OrderService.csرا در تقابل با#IOrderRepository.cs،#Order.csو#OrderDto.csبازبینی کن.
اهداف بررسی:
async void، استفاده نابجا از .Result یا عدم انتقال CancellationToken)OrderService.cs قرار دارد:public class OrderService(IOrderRepository repository, IUnitOfWork unitOfWork) : IOrderService
{
public async Task<OrderDto> CompleteOrderAsync(Guid orderId, CancellationToken cancellationToken)
{
var order = await repository.GetByIdAsync(orderId, cancellationToken);
// بروزرسانی وضعیت بدون اعتبارسنجی Nullability
order.Status = OrderStatus.Completed;
await repository.UpdateAsync(order, cancellationToken);
await unitOfWork.SaveChangesAsync(cancellationToken);
// واکشی مجدد و غیرضروری از دیتابیس
var updatedOrder = await repository.GetByIdAsync(orderId, cancellationToken);
return new OrderDto(updatedOrder.Id, updatedOrder.TotalAmount, updatedOrder.Status);
}
}#Order.cs و #IOrderRepository.cs ضمیمه پرامپت میشوند، کوپایلوت متوجه موارد زیر میشود:GetByIdAsync در ریپازیتوری خروجی Task برمیگرداند؛ عدم بررسی وضعیت null در خط ۵ منجر به خطای بالقوه NullReferenceException و هشدار کامپایلر C# (CS8602) میشود.GetByIdAsync پس از SaveChangesAsync یک درخواست شبکه/دیتابیس اضافی و بیمورد است، زیرا شیء order از قبل در حافظه موجود است و نیازی به واکشی مجدد ندارد.#file:FileName.cs: تزریق کامل متن یک فایل به کانتکست (حیاتی برای ارتباط سرویسها و اینترفیسها).#editor: متمرکز کردن هوش مصنوعی روی فایل یا تب فعلی در محیط ویرایشگر.#selection: محدود کردن دامنه تحلیل تنها به خطوط انتخابشده جهت جلوگیری از سردرگمی مدل در فایلهای حجیم.#sym:SymbolName: ارجاع مستقیم به یک متد، کلاس، enum یا رکورد خاص بدون نیاز به ارسال تمام فایل.#terminalLastCommand: استفاده از خروجی ترمینال برای عیبیابی سریع خطاهای dotnet build یا dotnet test.#PaymentService.cs) و اینترفیسهای وابسته برای تولید دقیق Mockها با Moq یا NSubstitute.