Open-Closed Principle trong Design Pattern

Open-Closed Principle là một nguyên tắc viết code mà ở đó code của chúng ta sẽ Open for Extension nhưng Closed for Modification. Điều này có nghĩa chúng ta sẽ không modify code đã có có thể phá vỡ tính đúng đắn của nó mà chúng ta sẽ thêm mới code để mở rộng thêm chức năng cho ứng dụng.

Ví dụ mình muốn đánh giá xếp loại cho sinh viên bất kỳ dựa vào điểm số, mình có thể viết code như sau:

Với enum Classification có nội dung như sau:

Những sinh viên nào có điểm số lớn hơn 9 sẽ được xếp loại excellence, lớn hơn 8 sẽ là good, lớn hơn 6 sẽ là normal và còn lại sẽ là medium. Mình sẽ chạy ví dụ như sau:

Kết quả:

Sẽ không có vấn đề gì nếu trong tương lai mình lại muốn thêm một tiêu chí xếp loại nữa là nếu điểm số nhỏ hơn 5 thì sẽ xếp loại yếu. Lúc này, nếu không apply Open-Closed Principal, mình sẽ phải đi modify phương thức clarify() trong class Student để đạt được mong muốn của mình. Có thể những ứng dụng đơn giản, các bạn sẽ thấy không có gì lớn lao nếu chúng ta modify trực tiếp phương thức clarify() nhưng hễ tưởng tượng bạn đang làm việc với những ứng dụng phức tạp, mỗi khi modify các class đã tồn tại, có thể sẽ break các feature đã work trước đó của ứng dụng.

Cách viết tốt hơn trong trường hợp này với Open-Closed Principal là chúng ta sẽ thêm class đảm nhận việc xếp hạng sinh viên với điểm số nhỏ hơn 5 như sau:

Enum Classification cũng cần phải update như sau:

Bây giờ, sửa lại ứng dụng ví dụ sử dụng class WeakStudent:

các bạn sẽ thấy kết quả như sau:

Kết quả vẫn như ở trên, nhưng nếu các bạn đổi score là 4:

các bạn sẽ thấy xếp loại WEAK sẽ được trả về:

Chúng ta đã thêm tính năng cho ứng dụng nhưng đã không cần phải modify class Student đã tồn tại.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *