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 قابلتوسعه.
