Chain of Responsibility la gi?
Chain of Responsibility la gi?

Design Pattern: Chain of Responsibility – Hiệu Ứng Cánh Bướm

Chain of Responsibility (CoR) là một Behavioral Pattern trong các Design Pattern thông dụng. CoR mang một tư tưởng là chia nhỏ các xử lý thành một chuỗi các xử lý nhỏ hơn, các Node bên trong chuỗi này sẽ đảm nhiệm 1 vai trò nhất định và truyền output của mình cho Node tiếp theo.

Vấn Đề Thực Tế: Xác Thực Đơn Hàng

Thử ví dụ về quá trình xử lý một đơn hàng trong ứng dụng thương mại điện tử. Ae cần có nhiều bước phải thực hiện:

  • Người dùng đã xác thực chưa?
  • Người dùng có đủ quyền hạn không?
  • Người dùng đã thanh toán chưa?
  • Dữ liệu trong yêu cầu có hợp lệ không?
  • response đã cache cho yêu cầu này không?
  • Cuối cùng, xử lý đơn hàng.

Nếu không có CoR, anh em có thể thực hiện tính năng với một hàm dài ngoằng và phức tạp, kiểm tra từng điều kiện một.

Việc thêm các kiểm tra mới hoặc thay đổi thứ tự trở thành một thách thức lớn.

Giải Pháp Với CoR: Tạo 1 Chuỗi Xử Lý

Chain of Responsibility Pattern đề xuất việc tạo ra một chuỗi các object handler. Mỗi handler chịu trách nhiệm cho một phần cụ thể của quá trình xử lý. Khi một yêu cầu đến, nó sẽ được “chuyền” cho handler đầu tiên trong chuỗi.

Mỗi handler sau đó quyết định:

  • Tôi có thể xử lý yêu cầu này không? Nếu có, handler sẽ thực hiện công việc của mình.
  • Tôi có nên chuyển nó đi không? Handler có thể xử lý một phần của yêu cầu và sau đó chuyển nó cho handler tiếp theo để xử lý thêm, hoặc nó có thể quyết định dừng chuỗi nếu nó đã xử lý xong yêu cầu (hoặc nếu một kiểm tra không thành công).

!!! Fun Tip: Reactive Programming là một hình thái của Chain of Responsibility

Khi nào nên sử dụng Chain of Responsibility

CoR rất đa dụng, bạn có thể áp dụng nó ở mọi nơi mọi loại dự án không nhất thiết phải là Backend, hay Frontend, …

Khi phân tích vấn đề, đưa ra giải pháp bạn cần phải chia nhỏ giải pháp thành nhiều bước và mỗi bước có 1 vai trò nhất định. Sau khi đã chia nhỏ xong, việc còn lại là áp dụng CoR để hiện thực nó thành Code.

Chain of Responsibility giúp chúng ta có một source code vừa gọn gàng, mạnh mẽ, rất dễ Test bằng Unit Test, và đồng thời còn dễ thay thế, bảo trì khi các requirements bị thay đổi.

Hãy theo dõi kênh Youtube, Facebook của mình để cập nhật thêm nhiều kiến thức nha!

@dantech