• 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: Dependency Inversion Principle

      LapDam by LapDam
      April 2, 2020
      in Architecture, Design, Dev, DevOps
      0
      SOLID Principles: Dependency Inversion Principle

      Hôm nay chúng ta cùng nhau đến với bài viết cuối cùng, nguyên lý cuối cùng của SOLID Dependency Inversion Principle.

      1. Các module cấp cao không nên phụ thuộc vào các modules cấp thấp. Cả 2 nên phụ thuộc vào abstraction.

      2. Abstraction không nên phụ thuộc vào chi tiết, mà ngược lại.

      Ở đây ta có một ví dụ về việc code không theo Dependency Inversion Principle (DIP).

      package com.gkatzioura.solid.di;
       public class BackEndDeveloper {
           public void writeJava() {
           }
       }
      package com.gkatzioura.solid.di;
       public class FrontEndDeveloper {
           public void writeJavascript() {
           }
       }
      package com.gkatzioura.solid.di;
       public class Project {
           private BackEndDeveloper backEndDeveloper = new BackEndDeveloper();
           private FrontEndDeveloper frontEndDeveloper = new FrontEndDeveloper();
           public void implement() {
               backEndDeveloper.writeJava();
               frontEndDeveloper.writeJavascript();
           }
       }

      Với cấu trúc code như thế này, nếu class Project cần nhiều deverloper hơn ta sẽ liên tục phải sửa code trong class Project.
      Nếu thằng BackendDeveloper chuyển từ viết Java sang viết PHP thì chúng ta lại tiếp tục sửa đổi nhiều class vì chúng đang bị phụ thuộc lẫn nhau. Ta có thể áp dụng DIP vào đây như sau.

      package com.gkatzioura.solid.di;
       public interface Developer {
           void develop();
       }
      package com.gkatzioura.solid.di;
       public class BackEndDeveloper implements Developer {
           @Override
           public void develop() {
               writeJava();
           }
           private void writeJava() {
           }
       }
      package com.gkatzioura.solid.di;
       public class FrontEndDeveloper implements Developer {
           @Override
           public void develop() {
               writeJavascript();
           }
           public void writeJavascript() {
           }
       }
      package com.gkatzioura.solid.di;
       import java.util.List;
       public class Project {
           private List developers;
           public Project(List developers) {
               this.developers = developers;
           }
           public void implement() {
               developers.forEach(d->d.develop());
           }
       }

      Và thế là ta đã có class Project không phụ thuộc vào module cấp thấp mà phụ thuộc vào abstractions. Ngoài ra các modue cấp thấp và chi tiết của chúng phụ thuộc vào absstractions.

      DIP được sử dụng rất nhiều. Tất nhiên có cũng có những ưu nhược điểm. Bên cạnh đó vẫn có nhiều sự tranh cãi về việc áp dụng DIP

      Ưu điểm: Giảm sự kết dính giữa các module, Code dễ bảo trì thay thế, Dễ viết Unit test.

      Nhược điểm: Khái niệm khó hiểu, Sử dụng Interface dẫn đến khó debug, Làm tăng độ phức tạp của code

      Vậy là chúng ta đã kết thúc series SOLID. Hy vọng nó sẽ có ích cho các bạn trong việc thiết kế, viết code.
      Hãy hiểu những nguyên lý này như những hướng dẫn giúp code của bạn đẹp hơn dễ bảo trì hơn. Nhưng tất nhiên nếu áp dụng không đúng lúc đúng chỗ nó sẽ cho tác dụng ngược lại.
      Ta cần biết về nó và áp dụng một cách mềm dẻo.
      Chúc các bạn trở thành những developer giỏi và yêu nghề nhé.

      Code của bạn có kinh như thế này không
      Thả tim (4 lượt thả tim)
      Loading...
      Previous Post

      Sinh tồn hay đạo đức

      Next Post

      Những đại dịch khủng khiếp nhất lịch sử

      LapDam

      LapDam

      Next Post
      Những đại dịch khủng khiếp nhất lịch sử

      Những đại dịch khủng khiếp nhất lịch sử

      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