CodeShot
Midسختی 3 از ۵· در 85٪ مصاحبه‌های این حوزه پرسیده شده

اصل Open/Closed چیست؟

نشان کردن

پاسخ کوتاه

کد باید برای توسعه باز و برای تغییر بسته باشد؛ افزودن رفتار جدید باید با کد جدید ممکن باشد، نه ویرایش کد قدیمی و تست‌شده.

پاسخ کامل

وقتی منطق شرطی (if/switch) با هر فیچر جدید رشد می‌کند، ریسک خراب کردن رفتار قدیمی در هر تغییر بالا می‌رود. با استفاده از Interface و Polymorphism، رفتار جدید با افزودن یک کلاس جدید اضافه می‌شود، بدون لمس کد موجود.

مثال کد

interface IDiscountStrategy { decimal Apply(decimal price); }
class BlackFridayDiscount : IDiscountStrategy
{
    public decimal Apply(decimal price) => price * 0.7m;
}

نکته مهم

Open/Closed معمولاً با Strategy Pattern یا Dependency Injection پیاده‌سازی می‌شود.

اشتباه رایج

❌ افزودن یک case جدید به یک switch بزرگ به‌جای طراحی یک Abstraction قابل‌توسعه.