CHƢƠNG 3 PHƢƠNG PHÁP THIẾT KẾ MẪU PHẦN MỀM
3.1. Các thành phần cơ bản của mẫu thiết kế
Nhìn chung mỗi mẫu thiết kế phần mềm đều bao gồm 4 thành phần cơ bản [6]:
3.1.1. Tên khuôn mẫu
Mỗi mẫu thiết kế đƣợc đặt tên với mục đích nêu bật đƣợc vấn đề mà nó hƣớng đến. Đó là một tên gọi để mô tả bài toán thiết kế, giải pháp và các kết quả khi áp dụng các giải pháp đó. Việc đặt tên mẫu thiết kế sẽ làm tăng thêm vốn từ vựng trong thiết kế. Nó cho phép ta thiết kế một cách trừu tƣợng ở mức cao hơn. Khi đã có một từ vựng về các mẫu thiết kế, ta có thể dùng nó để trao đổi với các đồng nghiệp, có thể dùng nó trong các tài liệu liên quan. Nó giúp các developer trao đổi với nhau dễ dàng. Khi đề cập đến tên của một mẫu thiết kế nào đó, ngƣời ta có thể dễ dàng nhận ra giải pháp mà ngƣời nói hƣớng đến. Nó giúp hình dung dễ dàng hơn về những thiết kế, dễ nhận ra hơn những ƣu, nhƣợc điểm của mẫu thiết kế.
3.1.2. Vấn đề
Mô tả ngữ cảnh áp dụng mẫu thiết kế đó, giải thích những vƣớng mắc trong các ngữ cảnh cụ thể. Nó cũng mô tả các vấn đề thiết kế đặc trƣng nhƣ làm thế nào có thể thể hiện đƣợc những giải thuật dƣới dạng các đối tƣợng, mô tả những cấu trúc lớp có dấu hiệu của một thiết kế không linh hoạt. Qua đó ta có thể nhận biết, tránh sử dụng những cấu trúc đó hoặc có những phƣơng cách khắc phục. Đôi khi việc mô tả vấn đề không đủ xem xét việc sử dụng một mẫu thiết kế nào đó, ta có thể mô tả ngữ cảnh cũng nhƣ các điều kiện để có thể giúp cho việc lựa chọn áp dụng mẫu thiết kế đƣợc chính xác hơn.
3.1.3. Giải pháp
Mô tả giải pháp cho vấn đề, đó là các thành phần của mẫu thiết kế, quan hệ các thành phần, vai trò của mỗi thành phần và sự tƣơng tác giữa các thành phần đó. Giải pháp không mô tả một thiết kế hay cách cài đặt cụ thể nào cả, bởi mỗi mẫu thiết kế có thể đƣợc áp dụng cho nhiều trƣờng hợp khác nhau, trong những hoàn cảnh cụ thể khác nhau. Thay vào đó, mẫu thiết kế mô tả vấn đề thiết kế ở mức trừu tƣợng, giải thích cách lựa chọn, sắp xếp các đối tƣợng cho phù hợp và hiệu quả.
3.1.4. Hệ quả
Mặc dù ít khi đƣợc nhắc tới khi mô tả giải pháp, nhƣng nó có ý nghĩa tiên quyết trong việc đánh giá các giải pháp. Nó giúp ta hiểu rõ những ƣu nhƣợc điểm của mẫu thiết kế khi sử dụng chúng. Hệ quả của việc áp dụng mẫu thiết kế thƣờng đƣợc đo bằng tốc độ thực hiện và khối lƣợng tài nguyên yêu cầu. Nó cũng ảnh hƣởng tới việc lựa chọn ngôn ngữ và cách thức cài đặt chƣơng trình. Do đặc điểm khả năng tái sử dụng là yếu tố quyết định cho sự thành bại của hệ thống hƣớng đối tƣợng, kết quả áp dụng mẫu thiết kế cũng bao hàm tác động của mẫu thiết kế tới những đặc điểm căn bản của một hệ thống hƣớng đối tƣợng: tính linh động, khả năng mở rộng và tính khả truyển của hệ thống. Việc liệt kê những ƣu, nhƣợc điểm của mẫu thiết kế giúp cho việc hiểu rõ và đánh giá chúng đƣợc dễ dàng hơn.
3.2. Các định dạng mẫu thiết kế
Để xây dựng hay đƣa ra những mẫu thiết kế, ta có thể mô tả nó theo một cấu trúc nào đó. Hay nói cách khác, ta sẽ lựa chọn một định dạng phù hợp, dựa vào các thành của định dạng đó, thực hiện mô tả về mẫu thiết kế.
Việc sử dụng các ký hiệu đồ họa mang lại tính trực quan sẽ rất hữu ích, tuy nhiên chƣa đủ để mô tả đƣợc các nội dung. Để đơn giản, chúng ta có thể rút gọn việc mô tả các mẫu thiết kế nhƣ là việc xây dựng sơ đồ các lớp đối tƣợng và mối quan hệ giữa chúng. Tuy nhiên việc xem xét sơ đồ thiết kế lớp chƣa nói lên đƣợc ý nghĩa của mẫu thiết kế cũng nhƣ khả năng áp dụng của nó nhƣ thế nào. Để sử dụng lại thiết kế, ta cũng phải ghi lại các quyết định, sự luân phiên và sự thỏa hiệp dẫn đến nó. Các ví dụ cụ thể giúp ta có thể nhìn nhận mẫu thiết kế trong hành động và khả năng áp dụng của nó.
Do đó để mô tả mẫu thiết kế một cách đầy đủ và rõ ràng hơn, ta sử dụng một định dạng nhất quán để mô tả nó. Có nhiều định dạng khác nhau đƣợc sử dụng để mô tả một mẫu thiết kế. Mỗi tác giả có xu hƣớng tạo định dạng mẫu thiết riêng của mình, nhƣng các dịnh dạng mẫu nhất định phải trở lên phổ biến hơn. Có một định dạng thƣờng đƣợc dùng chính xác bởi các tác giả mới hay ít nhất nhƣ là một điểm khởi đầu. Ở đây ta sử dụng một định dạng phổ biến, đó là định dạng GoF, đã đƣợc Erich Gamma sử dụng để mô tả 23 mẫu thiết kế nổi tiếng. Theo đó mỗi mẫu đƣợc chia thành các hạng mục, cung cấp một cấu trúc đồng dạng, tạo cho các việc học, so sánh và sử dụng mẫu thiết kế đƣợc dễ dàng hơn.
3.2.1. Định dạng Alexandrian
tìm ra các ví dụ tốt của định dạng này trong thiết kế hƣớng miền Domain-Driven Design.
Định dạng Alexandrian mô tả mẫu thiết kế theo một trình tự nhƣ sau:
Đầu tiên, có một bức tranh, mà biểu diễn một ví dụ nguyên mẫu của mẫu đó;
Sau bức tranh đó, mỗi mẫu có một đoạn giới thiệu mà thiết lập ngữ cảnh cho mẫu, bởi giải thích làm thế nào nó giúp đỡ để hoàn thành một lƣợng lớn hơn các mẫu nhất định;
Vấn đề đƣợc đƣa ra. Đề mục này đƣa ra bản chất của vấn đề theo một hoặc hai câu. Sau đó tiêu đề này trở thành thân của vấn đề. Đây là mục dài nhất. Nó mô tả nền tảng kinh nghiệm của mẫu thiết kế, bằng chứng cho tính hiệu lực của nó, phạm vi của các cách khác nhau, mẫu thiết kế có thể đƣợc biểu lộ trong một xây dựng….
Giải pháp, trái tim của mẫu thiết kế mà mô tả lĩnh vực và các mối quan hệ mà yêu cầu để giải quyết vấn đề, trong ngữ cảnh đƣa ra. Giải pháp thƣờng đƣợc đƣa ra theo định dạng của một chỉ thị, để biết chính xác cái gì cần làm, để xây dựng mẫu;
Sau giải pháp, có một biểu đồ với các nhãn để chỉ ra các thành phần chính của nó;
Cuối cùng, có một đoạn gắn liền với mẫu đến tất cả các mẫu nhỏ hơn trong ngôn ngữ, mà cần thiết hoàn thành mẫu này, để trang điểm nó.
Trong các mẫu thiết kế phần mềm sử dụng định dạng Alexandrian, một sự biến đổi thông dụng là chia phần chính, phần thân của giải pháp, thành 2 phần. Phần thứ nhất, sau tiêu đề vấn đề, thực hiện mở rộng vấn đề và các phát hành xung quanh nó. Phần thứ hai đƣợc di chuyển đến sau tổng kết giải pháp, và mô tả chi tiết của giải pháp.
3.2.2. Định dạng GOF
Định dạng GOF là một định dạng đƣợc sử dụng trong sách Gang of Four, mà đã đƣa ra các mẫu nổi tiếng trong thế giới phần mềm. Nó là một định dạng rất có cấu trúc, chia mẫu thiết kế thành các mục: Intent, Motivation, Applicability, Structure, Participants, Collaborations, Consequences, Implementation, Sample Code, Known Uses, and Related Patterns.
3.2.3. Định dạng Porland
Định dạng Portland có tên từ thực tế là nhiều ngƣời, từ vùng Portland Oregon, tại những thảo luận các mẫu đầu tiên, tất cả đã sử dụng cùng một định dạng.
Định dạng Portland hoàn toàn nguyên bản và rất ngắn, thƣờng ít hơn một trang trên 1 mẫu. Một cặp đoạn mô tả vấn đề, sau đó có một từ “therefore” dùng để nhấn mạnh vấn đề, theo sau lài một cặp đoạn mà mô tả giải pháp.
3.2.4. Định dạng Coplien
Đƣợc gọi nhƣ vậy, bởi vì nó luôn đồng hành với Jim Coplien. Nó cũng đƣợc tham chiếu nhƣ là định dạng Canonical.
Các phần từ chính của định dạng là các mục: vấn đề, ngữ cảnh, hiệu lực và giải pháp. Hầu hết các tác giả cũng thêm vào một số mục mở rộng. Mỗi mục là một đoạn mới, với mục hiệu lực thƣờng làm một danh sách các điểm liệt kê. Các mẫu theo định dạng này thƣờng khá ngắn, khoảng 2 trang.
3.2.5. Định dạng POSA
Định dạng này có tên từ sách POSA. Tƣơng tự nhƣ định dạng GOF, nó là một định dạng rất có cấu trúc và hơi lớn, mặc dù các đề mục của nó gồm: summary, example, context, problem, solution, structure, dynamics, implementation, example resolved, variants, known uses, consequences, and see also. Các mẫu thƣờng gồm rất nhiều trang. Một phần quan trọng của định dạng này là các mẫu thƣờng đƣợc nhắc đến trƣớc bởi một chƣơng trần thuật tổng kết các mẫu và mô tả qua các topic.
3.2.6. Định dạng P of EAA
Một định dạng khác ít đƣợc sử dụng hơn, đó là định dạng P of EAA, đƣợc đƣa ra bởi Christopher Alexander, sử dụng trong các mẫu thiết kế của ông. Nó là định dạng mang tính tính trần thuật, với một số mục: how it works, when to use it, and one or more examples. Độ dài một mẫu theo định dạng này thƣờng là 8 trang, và có thể biến đổi từ 1 trang đến 12 trang.