© 2026 Laravel

Open/Closed Principle – Mở rộng hệ thống mà không sửa code cũ

2 phút đọc 20 lượt xem

#Nguyên tắc cốt lõi

👉 Open for extension – Closed for modification

👉 Rule:

  • Không sửa code cũ
  • Thêm behavior bằng class mới

#Bad Example (if/else hell)

if ($type === 'credit_card') {}
if ($type === 'paypal') {}

#Vấn đề

  • Mỗi lần thêm feature → sửa code cũ
  • Dễ gây regression bug
  • Vi phạm OCP

#Good Example (Strategy Pattern)

interface PaymentMethod {
    public function process(Money $amount): PaymentResult;
}

👉 Mỗi payment = 1 class

#Giải thích sâu (Senior mindset)

#1. OCP thực sự giải quyết vấn đề gì?

👉 Tránh sửa code đã chạy ổn định

#2. Extension point là gì?

👉 Nơi cho phép thêm behavior

#3. OCP + DIP

👉 Interface là nền tảng để mở rộng

#4. Strategy Pattern = OCP điển hình

#5. Plugin architecture

👉 Register dynamic behavior

#Tips & Tricks

#1. Tránh switch/if theo type

#2. Dùng polymorphism

#3. Identify change axis

👉 Thứ nào hay thay đổi → tách ra

#4. Combine với DI container

#5. Không over-engineer

👉 Chỉ áp dụng khi có nhiều variation

#Interview Questions

1. OCP là gì?

Summary:

  • Mở rộng không sửa code

Deep: Thêm class mới thay vì modify class cũ

2. Tại sao if/else vi phạm OCP?

Summary:

  • Phải sửa code

Deep: Mỗi feature mới → modify

3. Pattern nào thường dùng cho OCP?

Summary:

  • Strategy
4. Khi nào không cần OCP?

Summary:

  • Code đơn giản
5. OCP liên quan DIP không?

Summary:

Deep: Phải có abstraction mới mở rộng được

#Kết luận

👉 OCP giúp:

  • Giảm bug production
  • Dễ mở rộng
  • Dễ maintain

👉 Nhưng:

  • Tránh over-design