تثبیت استانداردهای معماری با فایل copilot-instructions.md در سطح مخزن
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۳۹
آدرس: www.dntips.ir
CancellationToken را پاس بده») فرآیندی فرسایشی و خطاپذیر است. کارآمدترین و پایدارترین روش برای یکدستسازی خروجیهای هوش مصنوعی در کل تیم، تبدیل «دانش تجربی و ضمنی تیم» (Tribal Knowledge) به یک راهنمای مهندسی ساختاریافته و قابلفهم برای ماشین از طریق فایل .github/copilot-instructions.md است..github/ ریشه ریپازیتوری قرار میگیرد، Copilot به طور خودکار مفاد آن را به عنوان کانتکست پسزمینه در تمام پرسشها، تکمیلهای خودکار و تعاملات چت اعمال میکند.copilot-instructions.md برای پروژههای مدرن #NET / C..github/copilot-instructions.md با محتوای استاندارد زیر:# راهنما و استانداردهای مهندسی پروژه C# / .NET ## اصول و ویژگیهای زبان C# - قابلیت Nullable Reference Types همیشه فعال است؛ کدهای تولیدی نباید هشدار NRT داشته باشند. - از امکانات مدرن C# (شامل Primary Constructors، Collection Expressions، Pattern Matching و File-scoped Namespaces) استفاده کن. - از انتزاعهای غیرضروری و پیچیدگیهای ساختگی (Over-engineering) بپرهیز؛ خوانایی بر ترفندهای هوشمندانه ارجحیت دارد. - از الگوی Guard Clauses و Fail-Fast برای اعتبارسنجی پارامترهای ورودی استفاده کن. ## معماری و طراحی API - هرگز موجودیتهای پایگاه داده (EF Core Entities) را مستقیماً از Controller یا Minimal APIها برنگردان. - برای تمام قراردادهای ورودی و خروجی API از DTOها یا `record`های اختصاصی و Immutable استفاده کن. - برای اعتبارسنجی مدلها از کتابخانه FluentValidation استفاده کن. - پاسخهای خطای API باید منطبق بر استاندارد RFC 7807 (نوع ProblemDetails) باشند. ## الگوهای ناهمگام و کارایی (Async / Performance) - برای تمام عملیات I/O از متدهای Asynchronous استفاده کن. - پارامتر `CancellationToken` باید در تمام لایهها از کنترلر تا کوئریهای پایگاه داده منتقل شود. - کوئریهای صرفاً خواندنی در EF Core باید با `.AsNoTracking()` اجرا شوند. - هرگز از متدهای مسدودکننده (`.Result` یا `.Wait()`) استفاده نکن. ## تستنویسی - فریمورک تست پروژه xUnit است. - برای ارزیابی خروجیها از کتابخانه FluentAssertions استفاده کن. - برای Mock کردن وابستگیها از NSubstitute یا Moq استفاده کن. - تستها باید سناریوهای مرزی (Edge Cases)، ورودیهای تهی و مبالغ نامعتبر را پوشش دهند. ## مدیریت وابستگیها و پکیجها - هیچ کتابخانه شخص ثالث جدیدی را بدون دلیل فنی موجه به پروژه اضافه نکن. - ثبت سرویسها در Dependency Injection باید از تفکیک صحیح طولعمر (Scoped, Singleton, Transient) پیروی کند.
copilot-instructions.md را همانند کدهای اصلی پروژه در فرآیند Code Review و Pull Request ارتقا دهید. هرگاه تصمیم فنی جدیدی در تیم گرفته شد، بلافاصله آن را به این فایل اضافه کنید.