Design Pattern

Design Pattern – Mở đầu

Design Pattern

gof-car

Chào mọi người, đây là bài viết đầu tiên trong loạt bài về Design Pattern (Mẫu thiết kế). Ở bài viết này mình sẽ nói ngắn về khái niệm Mẫu thiết kế, công dụng của nó và đưa ra một bảng phân loại về một số mẫu thiết kế thông dụng.

Mẫu thiết kế phần mềm là gì?

Mẫu thiết kế phần mềm có tên tiếng anh là “Design Pattern”. Từ “Pattern” có từ ngành kiến trúc, nó có nghĩa là cách giải quyết vần đề trong một ngữ cảnh, hoàn cảnh cụ thể. Vậy “Design Pattern” là gì?
Trong công nghệ phần mềm, một mẫu thiết kế (Design Pattern) là một giải pháp có thể áp dụng lại cho các vấn đề chung thường gặp trong thiết kế phần mềm. Một phần mềm có thể hoàn thành mà không có sự góp mặt của Design Pattern nhưng sự có mặt của Design Pattern sẽ giúp xác định bài toán nhanh hơn và giải quyết một cách hiệu quả hơn. Một mẫu thiết kế không phải là một thiết kế hoàn thiện để có thể chuyển đổi trực tiếp thành mã. Nó chỉ là các hướng dẫn hay là ví dụ mẫu chỉ ra cách giải quyết một vấn đề mà chúng ta có thể áp dụng vào trong nhiều tình huống khác nhau.
Các giải thuật không được xem là các mẫu thiết kế, vì chúng giải quyết các vấn đề về tính toán hơn là các vấn đề về thiết kế.

Vì sao phải biết Design Pattern?

Các mẫu thiết kế có thể giúp tăng tốc quá trình phát triển phần mềm bằng cách cung cấp các mẫu hình (paradigms) phát triển đã được chứng thực và kiểm chứng. Để thiết kế phần mềm hiệu quả đòi hỏi phải xem xét các yếu tố mà chỉ trở nên rõ ràng sau khi hiện thực. Xác định được chúng, thông qua các mẫu thiết kế, chúng ta sẽ thoát khỏi chúng vì chúng có thể dẫn đến những rắc rối lớn và cải tiến khả năng dễ đọc của mã cho người viết mã và các nhà kiến trúc sẽ cảm thấy quen thuộc với các mẫu.

Thông thường, mọi người chỉ biết cách áp dụng một số kĩ thuật thiết kế phần mềm nào đó vào một vài vấn đề cụ thể nào đó. Những kĩ thuật này khó áp dụng mở rộng cho các vấn đề khác. Các mẫu thiết kế cung cấp các giải pháp chung, được viết tài liệu dưới một định dạng mà không gắn liền với một vấn đề cụ thể nào cả.

Các mẫu cho phép các nhà phát triển giao tiếp với nhau dùng các tên dễ hiểu, được dùng rộng rãi để đặt cho các tương tác của phần mềm. Các mẫu thiết kế chung có thể được cải tiến qua thời gian, để trở nên ổn định hơn là thiết kế theo đặc thù (ad-hoc designs).

Phân loại mẫu thiết kế

Các mẫu thiết kế có thể được phân loại dựa vào nhiều tiêu chí, chung nhất là dựa vào vấn đề cơ bản mà chúng giải quyết. Theo tiêu chuẩn này, các mẫu thiết kế có thể được phân loại thành nhiều lớp, một số trong chúng là:

  • Các mẫu Cơ Sở (Fundamental pattern)
  • Các mẫu Tạo Lập (Creational pattern)
  • Các mẫu Cấu Trúc (Structural pattern)
  • Các mẫu Ứng Xử (Behavioral pattern)
  • Các mẫu Đồng Thời (Concurrency pattern)
  • Các mẫu xử lí Sự Kiện (Event handling pattern)
  • Các mẫu Kiến Trúc (Architectural pattern)

DesignPattern_Classify

Các bạn cũng có thể tham khảo một bài viết chi tiết giới thiệu tổng quan về “Mẫu thiết kế” TẠI ĐÂY.

Các bài viết trong loạt bài này

Trong bài tiếp theo, để giúp cho những bạn mới bắt đầu có một cái nhìn cụ thể và hiểu được tầm quan trọng mà Design Pattern mang lại, mình sẽ xây dựng một chương trình với đoạn code xấu xí nhất, sau đó chúng ta sẽ cùng “Tái cấu trúc” (refactor) lại để có một cấu trúc chương trình đẹp (tương đối) bằng cách áp dụng các mẫu thiết kế.

Trước khi vào bài viết về “Mẫu thiết kế” đầu tiên, mình xin nhắc lại về khái niệm “Nguyên lý thiết kế”. 2 khái niệm này nghe hao hao giống nhau, nên các bạn cần phân biệt được chúng và điều quan trọng là phải biết nên đọc phần nào trước, phần nào sau. Mình xin lặp lại đoạn nội dung mình đã viết trong bài cuối cùng về “Nguyên lý thiết kế”:

SOLID được ví như là “nhập môn tâm pháp” nếu như các bạn muốn phát triển ứng dụng với các ngôn ngữ hướng đối tượng. Chỉ cần chúng ta nắm vững các nguyên lý trong việc thiết kế cấu trúc chương trình thì sẽ giúp cho chương trình chúng ta… (đọc lại ở đây nhé).
Tuy nhiên, các nguyên lý này chỉ mới chỉ ra cho chúng ta biết, thiết kế nào là đúng, thiết kế nào là sai chứ chưa giúp chúng ta giải quyết được vấn đề. Trong khi làm thực tế, gặp phải những vấn đề cụ thể như: làm thế nào để giảm thiểu số lượng các đối tượng phải tạo ra trong chương trình, làm thế nào để tích hợp một module có sẵn vào trong hệ thống của mình… Tất cả những chuyện như vậy sẽ được giải quyết bằng cách áp dụng các “Mẫu thiết kế” (Design Pattern). Nói đơn giản hơn, các mẫu thiết kế sẽ giúp chúng ta giải quyết những bài toán thường gặp trong những ngữ cảnh nhất định. Các mẫu thiết kế cũng tuân theo các nguyên lý thiết kế hướng đối tượng làm cơ sở. Vì vậy việc nắm vững các nguyên lý này là điều cần thiết nếu các bạn muốn tiến sâu hơn trong việc tạo ra 1 sản phẩm có kiến trúc đẹp, chất lượng.

Như vậy, mình nghĩ các bạn nên đọc trước về các “Nguyên lý thiết kế” trước khi bắt đầu với loạt bài về “Mẫu thiết kế” là cách tốt nhất. Nếu các bạn đã đọc qua về loạt bài SOLID, thì ngay bây giờ có thể CLICK VÀO ĐÂY để bắt đầu đặt chân vào THẾ GIỚI VỀ SỰ CHUẨN MỰC TRONG VIỆC THIẾT KẾ VÀ XÂY DỰNG KIẾN TRÚC CHƯƠNG TRÌNH.

NGUỒN: HTTP://EDWARDTHIENHOANG.WORDPRESS.COM/
EMAIL: EDWARDTHIENHOANG@GMAIL.COM
Advertisements

8 thoughts on “Design Pattern – Mở đầu”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s