Trong quá trình phân tích thiết kế hƣớng đối tƣợng, để đảm bảo tuân theo các nguyên lý thiết kế, đồng thời xây dựng lên kiến trúc tối ƣu cho hệ thống, ta thấy có sự lặp đi lặp lại của những kiến trúc. Trên cơ sở đó, ta trừu tƣợng, tổng quát vấn đề đó thành mẫu thiết kế để sử dụng cho những tình huống tƣơng tự. Do đó có thể nói rằng, mẫu thiết kế đƣợc bắt nguồn từ những tình huống, những vấn đề cụ thể.
Khi thực hiện việc viết các mẫu thiết kế, ta cố gắng dựa trên các nguyên lý thiết kế và thực tiễn một cách triệt để nhất. Các thiết kế ngầm định và tƣờng minh trong mẫu thiết kế cần dựa vào các nguyên lý xuất phát từ một sự hiểu biết sâu rộng về thực tiễn. Khi đó cũng sẽ hữu ích cho việc trích dẫn nguyên lý kèm theo, bởi nó có thể giúp cho đọc giả nguồn gốc cho việc thực hiện quyết định trên.
Để bắt đầu cho việc viết một mẫu thiết kế ta nên nhận dạng qua một tập các mẫu thiết kế đã đƣợc ứng dụng rộng rãi. Đó là việc hệ thống hóa mẫu bao gồm nhận dạng và ghi lại một cách hệ thống các luồng thông dụng và các nguyên lý thiết kế tốt đƣợc biểu diễn trong các mẫu thiết kế. Điều đó sẽ giúp nhận dạng cũng nhƣ hệ thống mẫu thiết kế dự định trong hệ thống các mẫu đã có, đồng thời tạo ra một cái nhìn tổng thể và hệ thống để trừu tƣợng hóa, tổng quát lên mẫu cần diễn đạt.
Các mẫu có thể đƣợc xây dựng từ các mẫu khác. Các mẫu có thể là kết hợp của các một vài mẫu thiết kế khác. Tính chất phức hợp của một mẫu phải đƣợc xem xét một cách cẩn thận. Bởi nó có thể bị phá vỡ thành các mẫu thiết kế thành phần nhỏ hơn. Liệu mẫu mà ta đang xây dựng là nguyên tử hay phức hợp.
2.2.2. Mẫu thiết kế là giải pháp cụ thể
Mẫu thiết kế đƣợc coi nhƣ là giải pháp cho vấn đề cụ thể. Hay nói cách khác, trọng tâm của mẫu thiết kế là về các giải pháp. Điều này là rất quan trọng, bởi chắc chắn có một chút gì đó đặc biệt có khuynh hƣớng dẫn đến các mẫu. Nét tổng thể của mẫu thiết kế là sự miêu tả một sự lặp đi lặp lại và giải pháp hữu ích cho vấn đề đó. Các nội dung khác trong mẫu thiết kế thƣờng là phần phụ trợ cho giải pháp khi giải pháp đó đƣợc đƣa ra phù hợp cho tình huống bắt gặp. Việc viết các mẫu thiết kế có thể đƣợc theo các dịnh dạng khác nhau, và do đó có các nội dung khác nhau. Tuy nhiên tất cả
59
đều có xu hƣớng hƣớng tới một mục tiêu, đó là tìm ra và mô tả giải pháp cho những vấn đề đang tranh cãi.
Bất kỳ giải pháp tốt nào cũng là một giải pháp cho một vấn đề cụ thể. Làm thế nào để có một giải pháp mà không có vấn đề tƣơng ứng. Việc hiểu vấn để hay một nhóm các vấn đề là một phần chính của việc hiểu và đƣa ra giải pháp. Nghĩ về các vấn đề giúp tập trung vào lõi của giải pháp. Nó cũng giúp tránh khỏi việc chệch hƣớng theo một thảo luận nào đó. Vì vậy việc hiểu vấn đề là quan trọng, và giải pháp sẽ vẫn là trọng tâm của các mẫu.
Khi nói về giải pháp, sẽ dễ hiểu hơn khi tập trung vào bản thân giải pháp và làm thế nào để áp dụng giải pháp đó. Ngƣợc lại việc xem xét giải pháp nào là phù hợp và những điều kiện nào là phù hợp hay không phù hợp với nó sẽ gây ra những khó khăn hơn cho việc viết mẫu thiết kế tƣơng ứng. Đây là lý do tại sao ngƣời viết mẫu thiết kế thƣờng nhấn mạnh vào vấn đề, bởi vì điều đó tập trung trí óc của chúng ta vào việc khởi nguồn cho các mẫu thiết kế.
Khi nghĩ rằng đã có một mẫu, hãy cố gắng không nghĩ về nó và tập trung nghĩ về một hƣớng khác. Điều này thƣờng dẫn đến với các mẫu luân phiên. Do đó các mẫu thiết kế thƣờng có một nhóm luân phiên. Điều này có thể giúp dẫn đến với một số mẫu khác phù hợp hơn, hoặc giúp ta hiểu chính mẫu thiết kế mà ta đã có ý định đƣa ra đƣợc sâu sắc hơn.
Ngữ cảnh của ứng dụng là yếu tố then chốt để đạt đƣợc thành công của bất kỳ giải pháp bắt nguồn cho một mẫu. Mọi giải pháp đƣợc mô tả trong các mẫu có thể thành công trong một ngữ cảnh nhƣng lại có thể thất bại trong ngữ cảnh khác. Một khó khăn là hiểu tại sao và sự phụ thuộc nhƣ thế nào vào ngữ cảnh sử dụng cụ thể.
2.2.3. Mục tiêu thiết kế mẫu là hướng tới người dùng
Trong quá trình viết mẫu thiết kế, cần tập trung vào khía cạnh ngƣời dùng, đặt ngƣời dùng vào trung tâm trong sự mô tả của nó. Mọi thứ trong mẫu cần là về những vấn đề mà ngƣời dùng biết, hiểu đƣợc ý nghĩa, hiểu và có ý định, cũng nhƣ các hoạt động thực hiện trong sự phản hồi đối với cách cƣ xử của hệ thống. Tác giả của mẫu thiết kế cũng cần xem xét ngƣời dùng cuối nhƣ là một phần quan trọng của khán giả. Một trong các mục tiêu của việc viết mẫu thiết kế tốt nên là trợ giúp ngƣời thiết kế trong việc giao tiếp với ngƣời dùng cuối.
Một mẫu không phải là một thiết kế. Một điều quan trọng là phân biệt giữa một mẫu thiết kế và một thiết kế. Một mẫu thiết kế phản ánh sự thực thi tốt nhất đã đƣợc chứng minh, cung cấp nhƣ là một mô hình hay nơi bắt đầu cho ngƣời thiết kế để tạo một giải pháp. Vai trò của một mẫu là để cung cấp hƣớng dẫn thiết kế, trợ giúp cho ngƣời thiết kế trong việc tạo sự lựa chọn thiết kế tốt nhất có thể để thỏa mãn nhu cầu ngƣời dùng.
60
Sự trung lập về mục đích: tác giả mẫu thiết kế nên tạo các giả định tối thiểu về mục đích ngƣời dùng. Các yêu cầu xác định và các mục đích của ngƣời dùng là phạm vi quan trọng của ngƣời thiết kế, ngƣời mà hầu nhƣ làm việc với vấn đề xác định và phạm vi hạn chế.
2.2.4. Các thuật ngữ trong mẫu thiết kế điển hình và gợi vấn đề
Các thuật ngữ đƣa ra trong mẫu thiết kế phải nhất quán. Một mô tả mẫu phải luôn luôn đƣợc viết với sự chú ý tới tính nhất quán và không mơ hồ của các thuật ngữ. Một thuật ngữ đƣợc sử dụng trong một mẫu phải có cùng nghĩa khi sử dụng nó trong mẫu khác.
Một mẫu thiết kế tốt mô tả một phần của chức năng đƣợc tham chiếu bởi tên mẫu mà không có sự giải thích kèm theo. Điều này cung cấp một nhóm các khái niệm làm giàu vốn từ vựng và thảo luận một cách dễ dàng giữa những ngƣời phát triển và ngƣời thiết kế. Do đó việc lựa chọn đặt tên mẫu là rất quan trọng. Tên của một mẫu sẽ phản ánh mục đích của nó.
Các mẫu đóng góp vào một ngôn ngữ chia sẻ, vì các tên của các mẫu đƣợc hệ thống hóa, chúng nhƣ là một dạng của giao tiếp giữa các ngƣời phát triển và ngƣời thiết kế, phân tích nghiệp vụ, và thậm chí các chuyên gia và các ngƣời dùng cuối. Theo cách này, các mẫu trở thành bộ phận của một ngôn ngữ chia sẻ cho việc thảo luận thiết kế giao diện ngƣời dùng trong số tât cả những ngƣời mà thực hành nó và ngƣời bị tác động bởi nó.
Lựa chọn phép ẩn dụ cẩn thận. Nếu có thể, lựa chọn các phép ẩn dụ cần rõ ràng và quen thuộc từ kinh nghiệm thế giới thực mà không dựa trên các thuật ngữ. Phép ẩn dụ đƣợc lựa chọn có thể là trong hiểu biết về thế giới thực của ngƣời dùng. Điều này có thể cung cấp đòn bẩy cho việc đạt đƣợc sự hiểu biết nhanh chóng của những vấn đề đang xảy ra. Cho ví dụ, ảnh của một file di chuyển giữa các thƣ mục trên màn hình có thể là một phép ẩn dụ tốt cho quá trình thay đổi con trỏ file gắn với cây thƣ mục, thậm chí khi không có dữ liệu nào đƣợc di chuyển. Đây là một cách tốt cho ngƣời dùng để hiểu quá trình theo một cách thông dụng và tiện lợi.
2.2.5. Lựa chọn các tình huống áp dụng điển hình
Tìm kiếm các ví dụ điển hình: một mô tả mẫu nên đƣợc hỗ trợ bởi các ví dụ đáng tin cậy của các ứng dụng thành công. Để minh họa tính tổng quát, cần đƣa ra các ví dụ thể hiện rõ các nguyên lý thiết kế tốt. Trong khi thƣờng đƣợc biểu diễn theo ngôn ngữ của các mẫu, các ví dụ cũng có thể đƣợc biểu diễn nhƣ là các sự xác định hay các sự thực thi thực tế.
Nhiều ngƣời có vẻ lo lắng về các ví dụ trong mẫu và các mã ví dụ nhất định. Bởi khi xem xét mẫu thiết kế trong ví dụ cụ thể sẽ dẫn đến sự khó khăn khi áp dụng cho những vấn đề tƣơng tự trong tầm bao quát của mẫu thiết kế. Đó là một lý do xác
61
thực để lo lắng rắng một số đọc giả sẽ xem ví dụ nhƣ là các mẫu, nghĩ về mẫu nhƣ là các macro nổi bật.
Tuy nhiên, khi đƣa ra một ví dụ, ta có thể trừu tƣợng hóa vấn đề từ đó dựa theo các nguyên lý tổng quát. Vì vậy vẫn tốt hơn là đƣa ra một ví dụ, và đánh giá độ rủi ro khi không có sự trừu tƣợng, hơn là tránh ví dụ và làm mất đọc giả hoàn toàn trong sự trừu tƣợng.
Nếu băn khoăn về một sự thể hiện nhất định của một mẫu, thì một cách tiếp cận hữu ích là sử dụng đa ví dụ. Các ví dụ khác nhau của cùng một mẫu có thể giúp minh họa các chuỗi tình huống thông dụng. Các ví dụ khác nhau có thể là các cách tiếp cận khác nhau sử dụng cùng một nền hay các nền khác nhau.
Khi viết một mã một ví dụ, có một áp lực trong độ phức tạp của nó. Nếu tạo nó quá đơn giản, thì đọc giả có thể bỏ qua nó. Nhƣng nếu quá phức tạp thì ngƣời dùng sẽ phải hiểu một tập các vấn đề mà có thể chƣa có những tập trung vào vấn đề cần quan tâm. Tuy nhiên, sự đơn giản hóa có thể có những thuận lợi hơn. Từ những thứ đơn giản, sau đó ta có thể thêm vào nhiều thứ phức tạp với các tƣơng tác giữa các mẫu. Việc hiểu một chút vấn đề tôt hơn là thất bại khi hiểu rất nhiều. Điều này đƣợc củng cố thêm bởi một vấn đề là một đọc giả chỉ nên phải đọc một mẫu để hiểu mẫu đó.
2.3. Tổng kết chƣơng
Một trong những mục tiêu của thiết kế phần mềm hƣớng đối tƣợng là tăng khả năng sử dụng lại. Khi thực hiện phân tích thiết kế phần mềm dựa theo các nguyên lý thiết kế hƣớng đối tƣợng, ngƣời ta thấy rằng có những cấu trúc lặp đi lặp lại, từ đó tổng quát lên các mẫu thiết kế. Do đó, việc nghiên cứu các nguyên lý thiết kế hƣớng đối tƣợng là điều rất quan trọng, nhất là khi các nguyên lý đó có mối liên hệ trực tiếp với việc phát triển các mẫu thiết kế phần mềm. Xuất phát từ đó kết hợp với trừu tƣợng hóa từ các mấu thiết kế GoF đã đƣợc trình bày trong chƣơng 1, tác giả đã khái quát lên 5 nguyên lý cho việc phát triển các mẫu thiết kế. Đó là các nguyên tắc hay là các gợi ý cho việc định hƣớng tƣ duy khi nghĩ về xây dựng các mẫu thiết kế phần mềm trong những tình huống phát sinh. Các nội dung này đã đƣợc trình bày trong chƣơng 2 của luận văn.
62
CHƢƠNG 3. PHƢƠNG PHÁP THIẾT KẾ MẪU PHẦN MỀM
Bất kỳ ai khi nhìn vào các mẫu thiết kế thƣờng luôn đƣợc gây chú ý bởi thực tế rằng hầu hết các mẫu thƣờng đƣợc viết sử dụng một định dạng thông dụng. Ngay khi bạn nhìn vào 2 tập các mẫu, ta cũng có thể thấy rõ rằng hiếm khi 2 mẫu các tác giả sử dụng cùng kiểu định dạng. Các định dạng mẫu khác nhau có những đặc trƣng riêng và các tác giả mẫu thƣờng có khuynh hƣớng lựa chọn một mẫu phù hợp riêng cho mình. Mặc dù có nhiều định dạng khác nhau, hầu nhƣ các mẫu đều có các phần tử cơ bản.
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ả.
63
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ế.