Design pattern là gì mà lập trình viên giỏi phải biết

61

Chào các bạn,

Trên blog của mình đã có một bài viết về design pattern trong Javascript. Mình cũng đã lên kế hoạch viết tiếp phần 2, tuy nhiên lại nhận thấy design pattern là một khái niệm rất quan trọng, trong 1 2 bài viết không thể nào mà diễn tả hết nổi. Vì vậy mình quyết định viết cả một series chỉ để trình bày về khái niệm hay ho này. Mời các bạn cùng theo dõi.

Mở đầu trong series này chính là bài viết “Design pattern là gì?”.

I. Design pattern là gì?

Design pattern không phải là một đoạn code cụ thể, mà nó là một khuôn mẫu cho việc giải quyết các vấn đề thường gặp trong lúc code.

Design pattern là một kỹ thuật vô cùng quan trọng trong phát triển phần mềm, nếu áp dụng đúng cách nó sẽ giúp code của bạn dễ hiểu, dễ tái sử dụng hơn. Design pattern không bị phụ thuộc vào ngôn ngữ lập trình (thật ra là có nhưng chỉ 1 chút). Tức là với một mẫu design pattern, bạn có thể thoải mái áp dụng ở các ngôn ngữ lập trình phổ biến hiện này như java, C#, PHP, Javascript,…

Đối với anh em web developer, design pattern gần gũi nhất có có lẽ là MVC. MVC tổ chức code của chúng ta thành 3 thành phần với:

  • Model: Tầng làm việc với database
  • Controller: Tầng điều khiển logic
  • View: Tầng xử lý giao diện

Chúng ta sẽ cùng tìm hiểu kỹ hơn về design pattern này trong một bài viết cụ thể sau. Còn mình lấy ví dụ vậy để bạn hiểu rằng design pattern là những cái tương tự như mô hình MVC vậy.

II. Phân loại design pattern

Design pattern được chia làm 3 loại chính:

2.1 Creational Design Patterns (Nhóm khởi tạo)

Nhóm này tập trung các pattern để giải quyết cho việc khởi tạo đối tượng một cách thông minh và khoa học.

Để khởi tạo một đối tượng mới chỉ cần new ClassName là đủ rồi mà, có gì khó khăn đâu mà cần phải có cả một nhóm design pattern?

Không biết bạn nào có câu hỏi như trên không nhỉ? Đúng là như vậy, trong hầu hết các trường hợp để khởi tạo một đối tượng chúng ta sẽ sử dụng trực tiếp câu lệnh new ClassName. Nhưng đời đâu có như mơ, đâu phải lúc nào cũng thích newnew được đâu. Việc khởi tạo ra một đối tượng mới đôi khi phải trải qua vài điều kiện, vài logic thì mới được thực hiện.

Sau nhiều năm tích lũy kinh nghiệm, các bậc tiền bối xưa đã sáng tạo ra một số design pattern chuyên phục vụ cho việc khởi tạo đối tượng, một vài pattern nổi bật như:

  • Factory
  • Abstract Factory
  • Builder
  • Prototype
  • Singleton

Mình sẽ gửi tới bạn chi tiết về các pattern trên thông qua từng bài viết cụ thể.

2.2 Structural Design Patterns (Nhóm cấu trúc)

Nhóm này tập trung các pattern giải quyết các vấn đề liên quan tới cách tổ chức các lớp, đối tượng sao cho linh hoạt, ngăn nắp để dễ dàng thay đổi, hay mở rộng code sau này.

Một phần mềm bị thay đổi tính năng là điều xảy ra như “cơm bữa”. Nếu bạn không muốn mỗi lần thay đổi là một lần phải “đập đi làm lại cả hệ thống”, thì bạn nên có cách tổ chức linh hoạt để có thể thực hiện sự thay đổi dễ dàng hơn.

Cụ thể, mình sẽ gửi tới bạn các bài viết trình bày về các design pattern thuộc nhóm cấu trúc này như sau:

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

2.3 Behavioral Design Patterns (Nhóm hành vi)

Nhóm này tập trung các pattern giải quyết các vấn đề liên quan tới hành vi, sự phân công trách nhiệm giữa các đối tượng.

Dẫu biết mỗi lớp, đối trong dự án sẽ chịu một trách nhiệm riêng, nhưng khi dự án trở nên lớn và công kềnh thì rất khó để đảm bảo được điều này. Vì vậy các design pattern loại này sẽ giúp bạn quản lý hành vi, trách nhiệm của các lớp dễ dàng hơn.

Cụ thể chúng ta sẽ cùng nhau đi tìm hiểu một số design pattern sau:

  • Chain of Responsibility
  • Command
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

III. Lời kết

Design pattern là một kỹ thuật được áp dụng rất nhiều trong quá trình phát triển phần mềm, thậm chí bạn đã từng gặp hoặc tự tay áp dụng một số mẫu rồi những không nhận ra thôi.

Để nắm rõ các design pattern là một quá trình dài, bởi có vài pattern cứ na ná giống nhau. Chưa kể tới việc bạn cần phải “có cơ hội” thì mới có thể áp dụng được, bởi một số pattern cần phải có hoàn cảnh phù hợp thì bạn mới thấy được sự “lợi hại” của nó.

Bài viết này chỉ dừng lại ở mức độ “giới thiệu và phân loại” các pattern thôi. Chi tiết từng pattern thế nào mình sẽ gửi tới bạn thông qua các bài viết chi tiết.

Chào các bạn, hẹn gặp lại.