Mar 24, 2009

Design Pattern [phan 2] - Tổng quan

III. Tổng quan chung
"Bất cứ một vấn đề nào bản thân nó cũng tồn tại 2 mặt - tích cực và tiêu cực". Tại sao tôi lại sử dụng một câu mà phát ngôn theo kiểu "chẳng nói ra thì ai cũng biết" và nó lại mang đầy hơi thở của triết học như vậy? Tôi xin trình bày với các bạn là tôi nói như thế vì có 2 lý do, một là bản thân công việc tìm hiểu, phân tích và thiết kế hệ thống đã là việc yêu cầu khả năng tư duy trừu tượng cao vì thế nó vô cùng gần gũi với triết học. Hai là nếu các bạn nhìn nhận thiết kế mẫu một cách thái quá khiên cưỡng cũng không tốt - vì sao ? xin thưa với các bạn là thiết kế mẫu chính là việc bạn đang tái sử dụng lại những ý tưởng sáng tạo của người khác. Vâng cái tôi muốn nói đến ở đây chính là 2 từ "sáng tạo". Bản thân các bạn khi sử dụng các mẫu thì mặc nhiên bạn không cần sáng tạo gì nhiều, tuy nhiên đây chỉ là một sự nhắc nhở nhẹ để các bạn có nhìn nhận vấn đề thật khách quan, nào giờ thì chúng ta bắt đầu !

iii.1. Thiết kế mẫu - Design pattern là gì

Cũng như ở phần đầu tôi đã giới thiệu với các bạn mẫu thiết kế là cách thức chung để giải quyết một họ các vấn đề mang tính khái quát giống như nhau. Giống như khi ta xem sét về phương tiện giao thông đây là một họ các vấn đề và có thể khái quát hoá. Một mẫu thiết kế nhằm giải quyết điều gì đó tương tự như thế, nó không phải là một ứng dụng để bạn có thể gép vào để chạy ngay, chúng không phải là cái mà cứ phang thẳng các mẫu ra là có thể giải quyết ngay vấn đề của bạn - mẫu là khái quát chỉ mang tính gợi ý về cách thức giải quyết vấn đề.

Mỗi mẫu thiết kế mô tả vấn đề khái quát suất hiện trong một hoàn cảnh cụ thể và đề xuất giải pháp cơ bản để giải quyết vấn đề đó. Theo đó mỗi một mẫu sẽ có những đặc điểm như sau :
  • Tên của mẫu
Tên rất quan trọng. Cái tên phải toát lên được vấn đề mà nó đề cập đến cách thức giải quyết vế đề và các hệ quả của nó. Thông qua cách thức đặt tên cho thực thể nào thì sẽ phải hướng đến chức năng nhiệm vụ cách thức giải quyết vấn đề của thực thể đó và chỉ ngắn gọn trong vài từ, đây là một công việc vất vả. Tuy vậy nó sẽ nhanh tróng là một chuẩn mực giúp dễ dàng hình dung cái nó chứa đựng bao hàm.

  • Vấn đề
Chính là cốt lõi của câu chuyện vấn đề là cái mà bạn, tôi ... đang đề cập đến trong ngữ cảnh cụ thể. Mỗi một vấn đề thảo luận cần giải quyết đều có những đặc thù riêng và những những điểm chung, cách thức hoạt động tương tác. Đôi khi trong vấn đề cũng nêu lên một danh sách những điều kiện cần khi áp dụng mẫu. Công việc của bạn là tìm hiểu kỹ vấn đề mà mẫu giải quyết sau đó liên hệ nó đế bài toán cụ thể của bạn. Có thể nói trong "vấn đề", trọng tâm mà bạn quan tâm tới chính là cái gì đang diễn ra ...?, nó diễn ra như thế nào?

  • Giải pháp
Là tập hợp có tổ chức các thực thể nhằm giải quyết vấn đề, chúng có quan hệ, chách nhiệm và cùng cộng tác. Giải pháp chỉ ra cho bạn thấy, giúp bạn hình dung đường lối giải quyết vấn đề. Nó không phải là những bài thực hành để bạn mang thằng vào để giải quyết bài toán của mình. Trên thực tế giải pháp chỉ là một mô thức mà bạn có thể áp dụng để giải quyết rất nhiều những tình huống khác nhau.

  • Hệ quả
Kết quả việc áp dụng mẫu. Nó trình bày những điểm tích cực khả năng mở rộng, nâng cấp, những thế mạnh cũng như đề cấp đến những điểm còn hạn chế. Thông qua việc tìm hiểu hệ quả của việc áp dụng mẫu bạn có thể tìm cho mình một giải pháp tốt hơn nhờ vào những gợi ý cho bạn qua việc chỉ ra những hạn chế.

Một quan điểm nhất quán trong cuốn sách "GoF" của bốn tác giả đã nhấn mạnh đến đó là "thiết kế mẫu là sự thảo luận về những đối tượng truyền thông và những lớp tuỳ biến nhằm giải quyết những vấn đề thiết kế trong một ngữ cảnh cụ thể". Xin bạn nhớ cho là đối tựơng truyền thông và những lớp tuỳ biến.

iii.2. Mô tả mẫu
Phần này miểu tả các đề mục dẫn trong việc mô tả cho một mẫu. Mỗi mục sẽ làm sáng tỏ đến mức tối đa cho một mẫu, kinh nghiệm cho các bạn mới tìm hiểu là cần nghiên cưu kỹ tình huống áp dụng sau đó thấu hiểu bài toán dẫn dắt của mẫu, tiếp đó liên hệ nó với các mẫu khác. Đừng vội vàng phân tích và cố hiểu cấu trúc mẫu - structure của nó cũng như ưu nhược điểm của nó làm gì vội. Có thể coi đây như những hướng dẫn bước đầu cho bạn trong việc tìm hiểu mẫu.
  • Tên mẫu và phân loại - Pattern name and classification
Phần loại của mẫu được chia thành 3 nhóm lớn theo mục đích sử dụng của mẫu đó là mẫu kiến tạo, mẫu cấu trúc và mẫu hành sự. Các thành phần chia này chỉ là tương đối, tuy nhiên chúng là phương tiên hữu hiệu giúp bạn hiểu hơn về pattern. Trong đó các mẫu kiến tạo có chức năng tạo ra các thực thể, mẫu cấu trúc chỉ ra các thức tổ chức hợp lý. mẫu hành sử hướng đến các mô hình giao tiếp chuyền giao thông điệp, phản hồi đáp chả của hệ thống.

  • Mục đích - Intent
Ngắn gọn chỉ ra nhiệm vụ mong muốn đặt được của mẫu. Mẫu này làm cái gì, mục đích và lý do mong muốn đạt được thông qua mẫu này là gì.

  • Bài toán dẫn - Motivation
Là một tình huống mẫu (có rất nhiều cái tương tự ) đưa ra để dẫn nhập cho mẫu. bạn nên tìm hiểu thật kỹ cái này

  • Tình huống áp dụng - Applicability
Một tham khảo rất tốt nó chỉ ra một số những ngữ cảnh cụ thể của vấn đề mà ở đó bạn đem mẫu vào áp dụng

  • Cấu trúc mẫu - Structure
là cấu trúc ở mức độ tổng quát của mục đích.

  • Các thành phần - Participants
Mô tả các thành có trong mẫu, nhiệm vụ, chức năng của chúng.

  • Cộng tác - Collaborations
Chỉ ra cách thức hoạt động của các thành phần và cách thức chúng làm việc với nhau

  • Các hệ quả - Consequences
Ưu nhược điểm của mẫu, tại sao nó lại hỗ chợ tốt cho mục đich của nó...

  • Thực thi - Implementation
Lý giải có minh hoạ code về cách sử dụng của mẫu

  • Minh hoạ - Sample code
Những code minh hoạ cho mẫu

  • Mẫu liên đới - Related parttern
Những mẫu khác có thể được sử dụng để cùng làm việc với mẫu này

iii.3. Danh mục và tổ chức các mẫu
Dưới đây là một danh sách bao gồm 23 mẫu kinh điển của 4 tác giả bạn có thể xem qua phần này để nắm được tổng quan của cuốn sách cũng như cách thức tổ chức của các mẫu. Thiết nghĩ việc dịch các tên mẫu là không cần thiết - chúng giống như tên riêng vậy nên tôi sẽ vấn giữ nguyên tên của chúng.
  1. Abstruct Factory Cung cấp một giao diện cho việc tạo một họ các đối tượng quan hệ hoặc phụ thuộc mà không cần quan tâm đến lớp tạo
  2. Adapter Tạo ra giao diện cho một lớp được sử dụng để client khai thác, Adapter sẽ tạo ra những giao diện giảm đi sự rắc rối của việc ghép nối những thực thể với nhau.
  3. Bridge Tách sự trừu tượng ra khỏi phần thực thi, chúng chở nên độc lập với nhau
  4. Builder Tách biệt tiến trình khởi tạo một đối tựơng phực tạp thành những chức năng khởi tạo đặc thù cung cấp cho luông khởi tạo ra các đối tượng chức năng khác nhau
  5. Chain of Responsibility
  6. Command
  7. Composite
  8. Decorator
  9. Facade
  10. Factory Method
  11. Flyweight
  12. Interpreter
  13. Iterator
  14. Mediator
  15. Memento
  16. Observer
  17. Prototype
  18. Proxy
  19. Singleton
  20. State
  21. Strategy
  22. Template Method
  23. Visitor

Tổ chức các mẫu

Mẫu kiến tạo
Creational
Mẫu cấu trúc
Structural
Mẫu hành sự
Behavioral
Class
Factory Method
Adapter
Interpreter
Template Method
Object
Abstract Factory
Prototype
Builder
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Flyweight
Observer
Sate
Strategy
Visitor

Quan hệ logic của tất cả các mẫu



iii.4. Cách sử dụng một mẫu
Nếu như bạn đang cần hiểu ngay và tìm kiếm một giải pháp cho vấn đề của bạn thì bạn nên tiếp cân như thế nào để áp dụng và sử dụng mẫu một cách hiệu quả nhất. Phần này sẽ giới thiệu cho bạn từng bước tiếp cận và áp dụng mẫu cho vấn đề của mình.
  1. Đọc qua toàn bộ mẫu, sau đó đọc kỹ các tình huống áp dụng của mẫu - Applicability, nghiên cưu các hệ quả trong phần Consequences của mẫu để chắc chắn rằng mẫu phù hợp với yêu cầu của bạn
  2. Tìm hiểu các phần cấu trúc mẫu - Structure, cộng tác - Colllaborations và các thành phần - Participants. Hiểu kỹ từng lớp, đối tượng trong mẫu và những mối quan hệ giữa chúng trong mẫu
  3. Xem phần code minh hoạ - Sample code nếu bạn thấy chưa đủ để hiểu.
  4. Chọn lựa cho mẫu của bạn một cái tên sao cho đầy đủ ngữ nghĩa trong ứng dụng của bạn, lúc này bạn nên đặt tên theo mẫu mà bạn áp dụng làm hậu tố ví như --Factory, --Proxy... với phần đầu là tên lớp hoặc chức năng nghiệp vụ đặc tả trong hệ thống của bạn
  5. Cuối cùng bạn hoàn thành các thủ tục của mình tạo dựng bộ khung ứng dụng (các lớp, giao diện... )

Tốt nhất bạn nên làm việc với một tool hỗ chợ UML khi đã hoàn tất mọi việc bạn sẽ lợi cả nhiều đương vừa hiểu thêm về UML, vừa có bộ khung code, vừa có tài liệu ... bạn có thể tìm hiểu thêm về UML tại đây

3 comments:

  1. Comment thu cái xem tình hình thế nào

    ReplyDelete
  2. Nhìn sơ đồ hoa cả mắt @_@!

    ReplyDelete
  3. anh ơi! anh có thể đưa ra môt ví dụ áp dụng cụ thể để hình dung rõ không ạ?

    ReplyDelete

 
Bạn có thể dùng bài viết của tôi tùy ý bạn nhưng vui lòng ghi lại rõ nguồn cung cấp
The world in a click_
Copyright © 2008 linhdkl