تدوین نقشه مهاجرت و بازآفرینی کلان (Migration Plan) پیش از دستکاری سورسکد با GitHub Copilot
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۵۷
آدرس: www.dntips.ir
Plan -> Review -> Execute -> Test -> Review AgainPrompt -> Pray -> Commit)، ابتدا باید از مدل یک نقشه راه مهندسی، گامبهگام و قابلسنجش مطالبه کرد.مخزن کدهای این پروژه را تحلیل کن. ما قصد داریم از الگوی سرویسهای سنگین و لایهبندی مفرط (Repository-heavy pattern) به سمت یک معماری مدرنتر و سادهتر مهاجرت کنیم.
الزام مهم: فعلاً هیچ فایلی را تغییر نده یا حذف نکن.
ابتدا یک سند برنامه مهاجرت (Migration Plan) با بخشهای زیر ارائه بده:
۱. وضعیت معماری فعلی (Current Architecture): تشریح نحوه تعامل لایهها و شناسایی نقاط تجمع پیچیدگی.
۲. گراف وابستگیها (Dependency Graph): وابستگیهای متقابل میان اینترفیسها، ریپازیتوریها و سرویسهای دامنه.
۳. فهرست فایلهای کاندید (Candidate Files): دستهبندی فایلهایی که باید حذف، ادغام، یا بازنویسی شوند.
۴. ریسکهای بحرانی (Risks & Breaking Changes): تغییر قراردادهای داده، رفتارهای پیشبینینشده در تراکنشهای دیتابیس یا خطاهای زمان اجرا.
۵. توالی گامبهگام مهاجرت (Migration Sequence): مراحل خرد و افزایشی (Incremental Steps) به گونهای که پس از هر مرحله پروژه قابلیت dotnet build و اجرای موفق تستها را حفظ کند.۶. سپر آزمون (Safety Harness / Test Strategy): چه تستهای واحد یا یکپارچگی (Integration Tests) باید قبل از شروع نوشته شوند تا از رفتار قبلی محافظت کنند؟
۷. استراتژی بازگشت (Rollback Plan): در صورت بروز شکست در هر مرحله، مسیر بازگشت ایمن به وضعیت پایدار چگونه خواهد بود؟
Orders به عنوان پایلوت)، میتوان از شکستهشدن همزمان صدها کلاس جلوگیری کرد.dotnet test را در ترمینال اجرا کند، نتایج را ارزیابی کرده و خطاهای احتمالی را قبل از رفتن به گام بعدی اصلاح نماید.WebApplicationFactory روی سناریوهای کلیدی Endpointها برای ثبت وضعیت پایدار فعلی.DbContext یا ساخت Handlers در یک زیرسیستم ایزوله.Program.cs و حذف اینترفیسهای منسوخشده.@workspace در VS Code یا Solution Scope در Visual Studio: هنگام تدوین نقشه مهاجرت، به Copilot اجازه دسترسی کامل به کل فضای کاری را بدهید تا هیچ ماژول وابستهای از چشم تحلیل پنهان نماند.[Obsolete] پیش از حذف قطعی: به مدل تأکید کنید در فازهای میانی، متدها یا کلاسهای قدیمی را با اتریبیوت [Obsolete("Use NewHandler instead", false)] پرچمگذاری کند تا سایر بخشهای سیستم فرصت تطبیق داشته باشند.