بازبینی انتقادی تغییرات توسط خود Copilot (Self-Review)
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۳:۰۳
آدرس: www.dntips.ir
تغییراتی که در مرحله قبل اعمال کردی را مانند یک مهندس ارشد، بدبین و سختگیر #C بازبینی کن.
تمرکز ویژه روی موارد زیر:
۱. تغییرات رفتاری ناخواسته (Behavioral Changes): آیا جریان منطقی، ترتیب اجرای شروط یا رفتار در مقادیر مرزی تغییر کرده است؟
۲. پیچیدگی غیرضروری (Accidental Complexity): آیا ساختار بیشازحد انتزاعی شده است؟
۳. خطاهای همزمانی و Race Conditions: آیا تغییرات روی منابع مشترک بدون قفل یا نخهای ناهمگام انجام شده است؟
۴. تهیپذیری و هشدارها (Nullability & NRT): آیا فرضیات جدیدی در مورد مقادیر null وارد کد شده که قبلاً مدیریت میشد؟۵. افت کارایی (Performance Regressions): آیا تخصیص حافظه، کوئریهای دیتابیس یا پیمایشها سنگینتر شدهاند؟
۶. شکستن قرارداد API (Breaking Changes): آیا امضای متدها، فیلدهای DTO یا کدهای وضعیت HTTP تغییر یافتهاند؟
رویکردت کاملاً نقادانه باشد نه تدافعی.
پیادهسازی اولیه را با نسخه بازنویسیشده مقایسه کن و تمام تفاوتهای رفتاری زمان اجرا (Runtime Behavioral Differences) را با ذکر مثال فهرست کن.
public decimal CalculateTotal(Order order)
{
if (order == null) return 0m;
if (order.Items == null || order.Items.Count == 0) return 0m;
decimal sum = 0m;
foreach (var item in order.Items)
{
if (item.Price > 0 && item.Quantity > 0)
sum += item.Price * item.Quantity;
}
return sum;
}public decimal CalculateTotal(Order? order) =>
order?.Items.Sum(x => x.Price * x.Quantity) ?? 0m;order نال نباشد اما Items نال باشد، فراخوانی order.Items.Sum(...) کرش میکند، زیرا روی Items بررسی نال انجام نشده است (order?.Items?.Sum...).item.Price > 0)، اما در کد جدید، قیمتهای منفی در محاسبه مجموع لحاظ میشوند که یک تغییر رفتار بیزینسی مستقیم است.public decimal CalculateTotal(Order? order)
{
if (order?.Items is not { Count: > 0 } items)
{
return 0m;
}
return items
.Where(item => item is { Price: > 0, Quantity: > 0 })
.Sum(item => item.Price * item.Quantity);
}ArgumentNullException یا InvalidOperationException نسبت به کد اولیه جابهجا نشده باشد.using یا آزادسازی سوکتها و اتصالات دستخوش تغییر شدهاند یا خیر.