Single responsibility principle

  • Giới thiệu

    SOLID là cách viết tắt của các nguyên lý cơ bản trong thiết kế hướng đối tượng, 5 nguyên lý này rất quan trọng trong lập trình hướng đối tượng.

    + Single Resposibility principle – SRP

    + Open Closed Principle – OCP

    + Liskov Substitution Principle – LSP

    + Interface Segregation Principle – ISP

    + Dependency Inversion Principle – DIP

    Bài viết này tôi sẽ trình bày về nguyên lý đầu tiên: Single respónibility principle

  • Định nghĩa SRP
    • Định nghĩa responsibility

      Robert C. Martin chỉ ra rằng responsibility là một lý do để thay đổi. Để dễ hiểu, ta hãy hình dung responsibility là mục đích. Mục đích là những thứ bạn cần trong class của bạn, do đó một class chỉ nên có một mục đích mà thôi!

    • Định nghĩa SRP

      SRP chỉ ra rằng tất cả các đối tượng (object) chỉ có một resposibility duy nhất, và responsibility đó được gói trong một lớp. Từ đó Martin chỉ ra rằng một lớp hoặc module chỉ được có một và chỉ một lý do để thay đổi.

    • Ví dụ: Một module tạo và in một report, module này bị thay đổi bởi một trong 2 lý do. Đó là nội dung của report thay đổi hoặc format của report bị thay đổi. 2 sự thay đổi này được sinh ra bởi các nguyên nhân khác nhau. SRP chỉ ra rằng 2 nguyên nhân thay đổi này chính là 2 phần liên quan tới 2 responsibility khác nhau. Vì vậy người lập trình không tốt nếu ghép cả 2 phần này vào một lớp (Class).
  • Lợi ích của SRP:
    • Dễ dàng dùng lại cho các responsibility
    • Mã lệnh rõ ràng
    • Dễ dàng chọn tên phù hợp với responsibility
    • Dễ dàng để đọc hiểu đoạn code
  • Ví dụ một class là RepositoryBase dùng để truy cập database, ta định nghĩa 1 function là GetAll để lấy về tất cả dữ liệu của một bảng nào đó:

     

    https://gist.github.com/hadoan/542d0972ecdf33ac47e48e464f584eba

  • Trong ví dụ này, chúng ta đã vị phạm nguyên tắc của SRP, class RepositoryBase làm việc có 2 mục đích khác nhau là DataAccess và DataMapping: Để tuân thủ nguyên tắc này, ta tạo ra một class riêng chịu trách nhiệm về DataMapper:

     

    https://gist.github.com/hadoan/2f56c0e8edb94b5786fadb675b8eb9f3

2 thoughts on “Single responsibility principle

  1. Pingback: Up.VietGeeks.com

Leave a comment