تحول در تجربه کاربری CLI: مدیریت پیکربندی با متمرکزسازی تنظیمات dotnet ef در NET 11.
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۰۲ ۱۰:۰۵
آدرس: www.dntips.ir
.config/dotnet-ef.json را معرفی کرده است. این مقاله به بررسی معماری، مکانیزم پیمایش و کشف کشویی (Directory Walking)، الگوی اولویتدهی پارامترها (Precedence Rules)، مشخصات فنی ویژگیها و تأثیر آن بر بهبود گردشکارهای DevOps و CI/CD در پروژههای سازمانی میپردازد.dotnet ef) یکی از کلیدیترین ابزارها در زنجیره ابزار توسعهدهندگان داتنت برای تعامل با پایگاهداده و اِعمال نگاشتهای شیء-رابطهای (ORM) است. تا پیش از معرفی NET 11.، توسعهدهندگانی که از ساختارهای چندپروژهای (Multi-project Solutions) استفاده میکردند، مجبور بودند در هر بار اجرای دستوراتی نظیر dotnet ef migrations add یا dotnet ef database update، مجموعه مفصلی از آرگومانها را وارد نمایند:dotnet ef migrations add InitialCreate --project src/App.Infrastructure --startup-project src/App.Api --context AppDbContext --verbose
dotnet ef کاملاً مشهود بود.dotnet ef اکنون بهصورت خودکار قابلیت شناسایی و بارگذاری تنظیمات پیشفرض از فایلی تحت عنوان .config/dotnet-ef.json را داراست.DotNetEfConfigLoader از پوشه جاری (Current Working Directory) شروع به حرکت کرده و با پیمایش صعودی در درخت مسیرها (Walking up the directory tree)، به دنبال پوشه مخفی .config و فایل dotnet-ef.json درون آن میگردد..config/dotnet-ef.json استاندارد به شرح زیر است:{
"project": "src/App.Infrastructure",
"startupProject": "src/App.Api",
"framework": "net11.0",
"configuration": "Debug",
"context": "AppDbContext",
"runtime": "win-x64",
"verbose": true,
"noColor": false,
"prefixOutput": false
}project: مسیر نسبی یا مطلق پروژهای که کلاسهای DbContext و مایگریشنها در آن قرار دارند.startupProject: مسیر پروژهای که برنامه از آنجا اجرا میشود (حاوی تنظیمات Connection String).framework: فریمورک هدف جهت ساخت و اجرای دستورات (مانند net11.0).configuration: پیکربندی ساخت پروژه (مانند Debug یا Release).context: نام کلاس DbContext هدف در صورت وجود چند Context در پروژه.runtime: شناسه معماری اجرای هدف (Target Runtime Identifier - RID) مانند win-x64.verbose: فعالسازی خروجی تفصیلی و جزییات لاگها هنگام اجرای دستورات.noColor: غیرفعال کردن رنگبندی کلمات در خروجی کنسول (مفید برای سیستمهای CI/CD).prefixOutput: افزودن پیشوند سطح پیام (Info, Warning, Error) به ابتدای خطوط خروجی.اصل طلایی اولویت پارامترها:
پارامترهای صریح ورودی خط فرمان (CLI Options) همواره بر تنظیمات موجود در فایل پیکربندی پیشی میگیرند.
dotnet-ef.json تعریف شده باشد اما توسعهدهنده در ترمینال صریحاً گزینهای مانند --project یا --context را پاس دهد، مقدار ورودی خط فرمان مبنا قرار خواهد گرفت.DotNetEfConfigLoader.cs مسئولیت شناسایی، خواندن و نگاشت JSON به شیء داخلی تنظیمات را بر عهده دارد.RootCommand.cs بهروزرسانی شده تا پیش از اجرای دستورات، مقادیر پیشفرض را روی گزینههای ریشه و رفتار ارسال متغیرها (Context Forwarding) اِعمال کند.Resources.resx) اضافه شدهاند تا پیغامهای حمایتی چندزبانه و دقیق ارائه دهند.dbcontext optimize): مشکلی وجود داشت که طی آن اگر مقدار --context از طریق فایل پیکربندی تزریق میشد، باعث تغییر ناخواسته در رفتار رد کردن بهینهسازی (Skip-optimization) میگردید. این موضوع کاملاً تصحیح گردید.=) و دو نقطه (:) از جمله --context:Foo و -c:Foo را به درستی پشتیبانی کند..config/dotnet-ef.json در کنترل سورس (Git) باعث میشود تمامی اعضای تیم، بدون نیاز به تنظیمات فردی یا حفظ کردن دستورات طولانی، تنها با نوشتن dotnet ef database update دستور را با پروژهها و Context صحیح اجرا نمایند.noColor: true و prefixOutput: true درون فایل پیکربندی مخصوص محیط CI/CD، خوانایی لاگهای مربوط به مایگریشن پایگاهداده را در سرورهای ابری (آژور دیواپس، گیتهاب اکشنز و ...) به شدت افزایش میدهد..config/dotnet-ef.json در پیشنمایش ۵ داتنت ۱۱، گامی ارزشمند و کارآمد در جهت ارتقای تجربه توسعهدهندگان (Developer Experience - DX) به شمار میرود. این قابلیت با کاهش پیچیدگی و حذف پارامترهای تکراری در ابزار CLI، تکرارپذیری فرآیندها را افزایش داده و احتمال بروز خطا در مدیریت دیتابیس را به حداقل میرساند. انعطافپذیری طراحی، حفظ کامل اولویت پارامترهای خط فرمان و دقت بالای اعتبارسنجی نشان از بالغ بودن این ویژگی در اکوسیستم داتنت دارد.