SOLID Principal

September 8, 2025

I – Interface Segregation Principle (Nguyên tắc phân tách interface)

👉 Không ép client phụ thuộc vào những method mà nó không dùng.

  • Thay vì tạo một interface lớn, nên tách thành nhiều interface nhỏ, chuyên biệt.

  • Wrong

    interface Worker {
        public function work();
        public function eat();
    }
    
    class Human implements Worker {
        public function work() { /* ... */ }
        public function eat() { /* ... */ }
    }
    
    class Robot implements Worker {
        public function work() { /* ... */ }
        public function eat() {
            // Robot không ăn → nhưng vẫn phải implement
            throw new Exception("Robot không cần ăn");
        }
    }

    Right

    interface Workable {
        public function work();
    }
    
    interface Eatable {
        public function eat();
    }
    
    class Human implements Workable, Eatable {
        public function work() { /* ... */ }
        public function eat() { /* ... */ }
    }
    
    class Robot implements Workable {
        public function work() { /* ... */ }
    }

    Lợi ích của ISP

    1. Interface gọn gàng, rõ ràng: Mỗi interface chỉ phục vụ một mục đích → dễ hiểu, dễ áp dụng.
    2. Tăng tính linh hoạt: Class có thể implement đúng cái nó cần, không bị “gánh” code thừa.
    3. Giảm coupling: Thay đổi ở một interface nhỏ ít ảnh hưởng đến nhiều class khác.
    4. Hỗ trợ unit test tốt hơn: Mock một interface nhỏ dễ dàng hơn so với một interface khổng lồ.
    5. Tái sử dụng dễ hơn: Một interface nhỏ có thể dùng lại trong nhiều context khác nhau.

    Bất cập / Khó khăn

    1. Quá nhiều interface nhỏ: Nếu tách quá mức → sinh ra cả “rừng interface”, khó quản lý.
    2. Khó hiểu cho người mới: Người mới vào dự án có thể thấy “interface nhiều quá”, không biết nên dùng cái nào.
    3. Dễ nhầm lẫn với SRP: Vì ISP cũng nhấn mạnh việc “chia nhỏ trách nhiệm”, dễ khiến dev mới nhầm nó với Single Responsibility Principle.
      • Điểm khác biệt:
        • SRP nói về class (mỗi class một trách nhiệm).
        • ISP nói về interface (mỗi interface chuyên biệt, không ép client cài đặt thừa).
    4. Tốn effort thiết kế: Với dự án nhỏ hoặc đơn giản, việc tạo nhiều interface có thể không cần thiết, gây chậm tiến độ.
    Pages: 1 2 3 4 5 6