Giới thiệu tổng quan về Design Patterns

Giới thiệu tổng quan về Design Patterns

Tung Hoang

Giới thiệu tổng quan về Design Patterns

Design Patterns là một trong những công cụ hữu hiệu nhất để giải quyết các bài toán bạn gặp phải trong khi lập trình. Trong bài viết này mình sẽ chia sẻ cho các bạn khái niệm tổng quan về Design Patterns. Ở những bài viết sau ta sẽ đi sâu vào từng Design Patterns để có thể hiểu sâu hơn về nó.

Giới thiệu tổng quan về Design Patterns

Design Patterns là gì nhỉ? 

     Tổng quan thì Design Patterns như một công thức để ta có thể áp dụng vào giải quyết một số vấn đề cụ thể trong lập trình, cụ thể là Lập trình hướng đối tượng (OOP). Nó là những giải pháp đã được đúc kết và tối ưu hóa cho các trường hợp cụ thể. Thay vì phải tìm cách tối ưu hóa, tổ chức code lại từ đầu, thì bạn đơn giản có thể áp dụng các Design Patterns phù hợp và đã được tối ưu cho trường hợp bạn gặp phải. Từ định nghĩa đó ta có thể thấy được một số tình huống mà Design Patterns có thể phát huy sức mạnh tối đa của nó:

  • Bạn gặp một tình huống phức tạp khi lập trình. Đừng lo, khả năng cao đã có một (hoặc có thể là một vài) Design Patterns có thể giải quyết vấn đề của bạn thật đơn giản và gọn gàng. Chỉ cần áp dụng theo là xong.
  • Bạn trao đổi với các developer khác trong team về cách tổ chức source code của một hệ thống khá lớn và phức tạp. Bạn (và team của bạn) cảm thấy khó khăn khi trình bày ý tưởng của mình. Hãy sử dụng Design Patterns như một ngôn ngữ chung để nói về những ý tưởng phức tạp một cách đơn giản. (Giả sử thay vì nói rằng “Ta có thể tạo một Abstract Class để tập trung các xử lý tạo các Instance của class Hotel để dễ dàng che giấu việc khai báo các Instance con liên quan đến Hotel đồng thời có thể dễ dàng tạo nhiều Instance của Hotel mootj cách dễ dàng và tường minh” thì ta có thể nói là “Ta có thể áp dụng Abstract Factory Design Patterns cho class Hotel” thế thôi!)

Những điểm mạnh của Design Patterns

     Việc nắm bắt và áp dụng Design Patterns vào trong công việc của một Developer thực sự sẽ giúp ta có một bước phát triển hoàn toàn mới về cả tư duy lẫn kỹ năng lập trình. Bạn có thể thấy rõ điều đó qua những điểm mạnh của nó sau đây: 

  • Giúp bạn tăng tốc độ phát triển các ứng dụng. 
  • Cải thiện code structure, dễ dàng nâng cấp và sửa đổi.
  • Tăng khả năng code reusability.
  • Tăng tính readable đối với những cấu trúc code phức tạp. Tăng khả năng communicate giữa các thành viên trong team (Nếu mọi người đều biết về Design Patterns)
  • Do các Design Patterns đã được tối ưu nên ta cũng có thể tránh được những lỗi không mong muốn phát sinh trong quá trình Implementation.

Những hạn chế của Design Patterns

  • Design Patterns không phải là chìa khóa vạn năng, nó chỉ có thể giải quyết được một số những vấn đề nhất định. Nếu ta sử áp dụng Design Patterns vào những trường hợp không phù hợp có thể làm code trở nên rối và phức tạp hơn.
  • Design Patterns chỉ làm cho code dễ đọc dễ hiểu với những người có kinh nghiệm về Design Patterns đang được áp dụng. Tuy nhiên đối với những người mới có thể sẽ gặp khó khăn trong việc nắm bắt cấu trúc và khó khăn trong việc debug.
  • Bản thân từng Design Patterns cũng có những khuyết điểm của riêng nó (ta sẽ khảo sát cụ thể khi đi vào chi tiết từng Pattern). Nên khi áp dụng Design Patterns nào ta luôn phải cân nhắc kỹ lưỡng những lợi ích và khuyết điểm của nó để đưa ra quyết định có nên sử dụng hay không.

Phân loại các Design Patterns:

  • Nhóm Creational: Nhóm Creational là nhóm những Design Patterns tập trung các giải pháp khởi tạo đối tượng và che giấu logic khởi tạo những đối tượng:
    • Nhóm Creational bao gồm: Factory Method, Abstract Factory, Builder, Prototype, Singleton
  • Nhóm Structural: Nhóm Structural là nhóm những Design Patterns tập trung vào việc tối ưu các thiết kế của class và sự kết hợp các class và object trở lại một cấu trúc lớn hơn.
    • Nhóm Structural bao gồm: Adapter, Bridge, Composite, Decorator, Facade, Flyweight và Proxy
  • Nhóm Behavioral: Nhóm Behaviour là nhóm những Design Patterns tập trung sự phân chia trách nhiệm của các class và object để phục vụ một mục đích cụ thể. Nhóm này tập trung nhiều hơn vào mối quan hệ giữa các class và object với nhau.
    • Nhóm Behavioral bao gồm: Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor 

Cần chuẩn bị những gì trước khi tìm hiểu về Design Patterns?

  • OOP: Tất nhiên rồi, bạn phải nắm tính vũng tư duy lập trình theo hướng đối tượng đã. Các Design Patterns đơn giản là giúp bạn triển khai các tính chất của OOP dễ dàng và linh hoạt hơn mà thôi.
  • Cách đọc sơ đồ UML:  Các Design Pattern thường được thể hiện dưới dạng UML diagram, việc đọc hiểu một số concept UML cơ bản là cần thiết để bắt đầu học Design Patterns 
  • Các bạn có thể tham khảo tại đây: https://www.guru99.com/uml-diagrams.html
  • Dưới đây là 1 số concept UML cơ bản mình sẽ sử dụng trong loạt bài viết này: 

 

A picture containing diagram
    Description automatically generated

Diagram
    Description automatically generated

 

  • Ngoài ra hiểu được 2 quy tắc thiết kế “program to interfaces, not implementations” và “favor composition over inheritance” cũng khá quan trọng. Hầu hết các Design Patterns đề được thiết kế dựa trên 2 quy tắc này.

Lời Kết

     Tóm lại thì: Design Patterns là những mẫu thiết kế để giải quyết những vấn đề phổ biến hay gặp phải trong lập trình, đã được chấp nhận và sử dụng rộng rãi của nhiều lập trình viên có kinh nghiệm.

     Áp dụng Design Patterns giúp bạn cải thiện đáng kể tốc độ phát triển ứng dụng và dễ dàng hơn trong việc bảo trì, sửa chữa.

     Tuy nhiên, bạn cũng cần phải cân nhắc kỹ lưỡng tính chất của bài toán cần giải quyết, quy mô dự án đang triển khai cũng như những thành viên trong team của bạn trước khi cố gắng áp dụng bất kì Design Patterns nào vào code của dự án.

     Cuối cùng, Design Patterns sinh ra nhằm mục đích đơn giản hóa quá trình phát triển ứng dụng, chứ không phải làm cho nó phức tạp lên. Nhớ điều này nhé!

 

References: 

Design Patterns

Gangs of Four (GoF) Design Patterns | DigitalOcean

Books: Head First Design Patterns

saigon_technology

Related articles

Fault tolerance patterns for microservices

calendar

10 Mar 2023

time

9 mins read

So sánh Onion Architecture và Clean Architecture

calendar

05 Apr 2023

time

14 mins read

career_saigon_technology

Ho Chi Minh (Headquater)

location_pin

2nd & 3rd Floor, M.I.D Building, 02 Nguyen The Loc Street, Ward 12 Tan Binh District, Ho Chi Minh City, Vietnam

DMCA.com Protection Status

Quick Links

Opening Jobs

About us

Life at saigontechnology

Blog

Contact Us

PRIVACY POLICY

Follow Us

saigontechnology-great-plage-to-work-partner
saigontechnology-microsoft-partner
iso_9001iso_27001
sao_khue
50_leading

© Copyright 2022 by STS Software Technology JSC, Leading Software Outsourcing Company in Vietnam. All Rights Reserved.