بازآفرینی کدها (Refactoring) با اتکا به الگوهای مدرن زبان #C
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۲۴
آدرس: www.dntips.ir
if (user != null)
{
if (user.IsActive)
{
if (user.Role == "Admin")
{
return true;
}
}
}
return false;این قطعه کد را با استفاده از قابلیتهای مدرن C# بازآفرینی کن.
اولویتها و الزامات:
۱. رفتار منطقی کد و خروجیها دقیقاً حفظ شود (Behavior Preservation).
۲. خوانایی کد بهبود یابد و از الگوهای پیچیده یا انتزاع غیرضروری پرهیز شود.
۳. دلایل تغییرات اعمالشده را به صورت مرحلهای توضیح بده.
۴. یک نسخه با استفاده از ویژگیهای Pattern Matching و Property Pattern ارائه کن.
۵. یک نسخه سادهتر مبتنی بر Guard Clauses / Early Return هم پیشنهاد بده تا شفافیت هر دو رویکرد مقایسه شود.
null و مقادیر فیلدها را در یک عبارت فشرده و تمیز تجمیع میکند:public bool IsActiveAdmin(User? user) =>
user is { IsActive: true, Role: "Admin" };user != null) به طور ضمنی درون Property Pattern انجام میشود و شرطها به شکلی مستقیم و بدون نشت متغیر ارزیابی میگردند.public bool IsActiveAdmin(User? user) =>
user is not null && user.IsActive && string.Equals(user.Role, "Admin", StringComparison.OrdinalIgnoreCase);Specification Pattern یا اینترفیسهای پیچیده پیشنهاد دهد. اگر نیاز بیزینسی آن را توجیه نمیکند، چنین پیشنهادهایی را رد کنید.StringComparison را نادیده بگیرد. همیشه به مدل گوشزد کنید که استانداردهای امنیتی مقایسه رشتهها در #C را نقض نکند.