• About
  • Advertise
  • Privacy & Policy
  • Contact
DevZone
  • Home
  • News
  • Dev
    • All
    • Algorithm
    • Architecture
    • Database
    • Design
    • DevOps
    • IoT
    • Network
    • Test
    • Web
    Phương thức xử lý mảng trong javascript

    Phương thức xử lý mảng trong javascript

    Bảo vệ content, chống copy nội dung web!

    Bảo vệ content, chống copy nội dung web!

    Lưu ý mệnh đề NOT IN trong SQL

    Lưu ý mệnh đề NOT IN trong SQL

    SOLID Principles: Dependency Inversion Principle

    SOLID Principles: Dependency Inversion Principle

    Solid Principles: Interface Segregation Principle

    Solid Principles: Interface Segregation Principle

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    IPC – Đằng sau sự thành công của Chromium

    IPC – Đằng sau sự thành công của Chromium

    Dựng layout website với CSS Grid Layout

    Dựng layout website với CSS Grid Layout

    Golang cơ bản (p1)

    Golang cơ bản (p1)

    Trending Tags

    • Idea
    • Lifestyle
    No Result
    View All Result
    • Home
    • News
    • Dev
      • All
      • Algorithm
      • Architecture
      • Database
      • Design
      • DevOps
      • IoT
      • Network
      • Test
      • Web
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      Bảo vệ content, chống copy nội dung web!

      Bảo vệ content, chống copy nội dung web!

      Lưu ý mệnh đề NOT IN trong SQL

      Lưu ý mệnh đề NOT IN trong SQL

      SOLID Principles: Dependency Inversion Principle

      SOLID Principles: Dependency Inversion Principle

      Solid Principles: Interface Segregation Principle

      Solid Principles: Interface Segregation Principle

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      IPC – Đằng sau sự thành công của Chromium

      IPC – Đằng sau sự thành công của Chromium

      Dựng layout website với CSS Grid Layout

      Dựng layout website với CSS Grid Layout

      Golang cơ bản (p1)

      Golang cơ bản (p1)

      Trending Tags

      • Idea
      • Lifestyle
      No Result
      View All Result
      DEVZONE
      No Result
      View All Result
      Home Dev Architecture

      SOLID Principles: Single Responsibility

      LapDam by LapDam
      January 13, 2020
      in Architecture, Design, Dev, DevOps, Uncategorized
      0
      SOLID Principles: Single Responsibility

      SOLID là gì?

      Chắc hẳn nếu ai đã từng học hướng đối tượng thì đều biết đến 4 khái niệm cơ bản

      • Abstraction (Tính trừu tượng)
      • Encapsulation (Tính đóng gói)
      • Inheritance (Tính kế thừa)
      • Polymophirsm (Tính đa hình)

      Vậy thiết kế hướng đối tượng sẽ như thế nào?
      Hôm nay mình sẽ giới thiệu với các bạn 5 nguyên tắc thiết kế hướng đội tượng được gọi là SOLID
      SOLID là viết tắt của 5 chữ cái đầu trong 5 nguyên tắc thiết kế hướng đối tượng, giúp cho developer viết ra những đoạn code dễ đọc, dễ hiểu, dễ maintain
      Ở bài này chúng ta sẽ cùng tìm hiểu nguyên tắc đầu tiên Single Responsibility tương đương với chữ S

      Single Responsibility

      Một class chỉ nên giữ một trách nhiệm duy nhất.
      

      Nếu một class có nhiều hơn 1 lý do để thay đổi thì có nghĩa là nó có nhiều hơn 1 trách nhiệm.
      Như hình bên, ta có 1 con dao đa năng, nó rất cồng kềnh và khi một bộ phận bị hỏng ta phải thảo cả con dao ra và sửa chữa.
      Công việc bảo trì trở nên phức tạp và gây ảnh hưởng đến chức năng khác

      Ta cùng theo dõi ví dụ dưới đây

      class EmailHelper
      {
          public void Validate(string email)
          {
              // some validation logic
          }
       
          public void Send(string email, string message)
          {
              // some sending logic
          }
      }
      

      Class trên làm gì? Câu trả lời là Class trên giúp thao tác với địa chỉ email.
      Nhưng nó đã vi phạm nguyên tắc S, Class này có nhiều hơn 1 trách nhiệm. Vừa validate lại vừa gửi email.
      Vậy ta nên thiết kế như thế nào để nó phù hợp với nguyên tắc Single Responsibility?
      Hãy theo dõi ví dụ dưới đây.

      class EmailValidator
      {
          public void Validate(string email)
          {
              // some validation logic
          }
      }
       
      class EmailSender
      {
          public void Send(string email, string message)
          {
              // some sending logic
          }
      }
      

      Rất đơn giản, ta chỉ cần tách 2 class mỗi class 1 trách nhiệm là xong. Sau này mở rộng ta chỉ cần thêm class khác.
      Nếu cần chỉnh sửa gì thì với mỗi class ta chỉ thay đổi vì 1 lý do duy nhất.

      Kết luận

      Đây chỉ là nguyên tắc, trong thực tế các bạn sẽ thấy có những helper hay util class vi phạm nguyên tắc này
      Thậm chí sẽ có nhiều tranh cãi xoay quanh việc áp dụng nguyên tắc này.
      Nguyên tắc chỉ là nguyên tắc. Hãy xem nó như 1 hướng dẫn chứ không phải bắt buộc.
      Hãy sử dụng nó một cách hợp lý và biết khi nào cần khi nào không.
      Mời các bạn đóng đọc tiếp nguyên tắc thứ 2 Open/Closed Principle
      Chúc các bạn thành công.

      Thả tim (3 lượt thả tim)
      Loading...
      Previous Post

      Xây dựng Email Server với Postfix, Dovecot và Roundcube: #1 - Cài đặt Postfix, Dovecot trên Centos 7

      Next Post

      Customizing scores in Elasticsearch for product recommendations

      LapDam

      LapDam

      Next Post
      Customizing scores in Elasticsearch for product recommendations

      Customizing scores in Elasticsearch for product recommendations

      Leave a Reply Cancel reply

      Your email address will not be published. Required fields are marked *

      Recent News

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      July 25, 2020
      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      June 26, 2020
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      May 31, 2020
      Lợi ích của việc tập thể dục thường xuyên

      Lợi ích của việc tập thể dục thường xuyên

      May 25, 2020
      DEVZONE

      Browse by Category

      • Algorithm
      • Architecture
      • Database
      • Design
      • Dev
      • DevOps
      • Idea
      • IoT
      • Lifestyle
      • Network
      • News
      • Test
      • Uncategorized
      • Web
      • About
      • Advertise
      • Privacy & Policy
      • Contact

      © 2019 Devzone

      No Result
      View All Result

      © 2019 Devzone