📔 داتنت ۱۰ (C# 14): Extension members
📔 داتنت ۱۰ (C# 14): Extension members
یکی از بهبودهای داتنت C# 14، رو میشه Extension membersr دونست که فقط محدود به متد نیستند؛ حالا میشه پراپرتی، ایندکسر، و حتی event رو هم بهصورت اکستنشن برای یک کلاس یا اینترفیس اضافه کرد. این قابلیتها یک جهش بزرگ برای توسعهپذیری و Clean Code در نرمافزارهای بزرگ به حساب میاد.
فرض کنین چند تا تیم روی قابلیتهای مختلف پلتفرم کار میکنن. حالا به راحتی میشه Map کردن آبجکت به DTO و اعتبارسنجی و... با کدهای تمیزتر و بهتری پیادهکرد
csharp
public class Order
{
public int Id { get; set; }
public decimal Amount { get; set; }
public string Status { get; set; } = "pending";
public string? Customer { get; set; }
}
public class OrderDto
{
public int Id { get; set; }
public decimal Amount { get; set; }
public string Status { get; set; }
public bool IsPaid { get; set; }
}
و حالا اینجوری با بلاک اکستنشن:
public static class OrderApiExtensions
{
extension(Order order)
{
// متد اکستنشن: تبدیل Domain Model به DTO
public OrderDto ToDto()
=> new OrderDto
{
Id = order.Id,
Amount = order.Amount,
Status = order.Status,
IsPaid = order.IsPaid() // اکستنشن متد دیگه
};
// متد اکستنشن: بررسی پرداختشده بودن سفارش
public bool IsPaid() => order.Status == "paid";
// پراپرتی اکستنشن: نمایش عنوان مشتری
public string? CustomerDisplay =>
string.IsNullOrWhiteSpace(order.Customer) ? "(نامشخص)" : order.Customer;
}
}
و همین تمیزسازی پیادهسازیهای قبلی رو با قابلیت جدید دیگهای که اجازه میده تا instance constructors و events رو هم به صورت partial members تعریف کرد...