2010-06-18 33 views

Trả lời

8

Bất kỳ kho lưu trữ mẫu nào sẽ cung cấp cho bạn các gợi ý như "điều này hữu ích khi ...", nhưng thường không có bất kỳ chỉ mục nào cho phép bạn tra cứu "số thẻ tín dụng" và trả về "đối tượng ruồi" . Điều gần nhất có sẵn thường là nhóm các mẫu giống như hành vi, xây dựng, v.v.

Theo tôi, không có vấn đề gì khi tiếp cận một vấn đề bằng cách tự hỏi bạn nên áp dụng mẫu thiết kế nào. Nếu bạn đủ quen thuộc với một mẫu, bạn sẽ nhận thấy ngay lập tức rằng nó được áp dụng và cách thức. Nếu bạn không thấy phù hợp, sau đó cố gắng nhấn một mẫu vào dịch vụ chỉ để bạn có thể nói "Tôi đã sử dụng mẫu XX, vì vậy thiết kế phải tốt!" là một sai lầm nguy hiểm.

Có những người thậm chí còn nói rằng các mẫu thiết kế là một kludge ngay từ đầu, một dấu hiệu cho thấy ngôn ngữ của bạn không đủ biểu cảm. (Điều này không có vẻ điên rồ như vậy, hãy xem xét những thứ như WHILE vòng lặp hoặc bảng băm đã từng vắng mặt từ các ngôn ngữ lập trình, và các lập trình viên tổng thể của thời đại đó sẽ phải thực hiện lại chúng một lần nữa, bây giờ chúng là một phần của cú pháp, và không ai có thể mơ ước gọi chúng là 'mẫu'.) Tôi, tôi không phải là kẻ cực đoan đó; Tôi nghĩ rằng một mẫu thiết kế được lựa chọn tốt có thể rất hữu ích khi bạn sử dụng nó bởi vì bạn tin rằng nó là một giải pháp tốt, nhưng điều đó đòi hỏi bạn phải thấu hiểu nó, và theo kinh nghiệm của tôi, điều này hầu như luôn luôn phải tự mình thực hành . Giá trị của các mẫu nằm trong việc đưa ra một tên dễ nhận biết cho một cái gì đó thường được thực hiện, vì vậy bạn có thể nhớ nó tốt hơn và giao tiếp về nó với các đồng nghiệp của bạn.

+2

+1 liên lạc đẹp. Tôi thích cách bạn giải quyết các mẫu thiết kế như một cái gì đó mà bạn cần phải hiểu sâu sắc và sử dụng khi áp dụng; và làm thế nào nó có lợi để biết chúng để bạn có thể truyền đạt ý định của bạn với các đồng nghiệp của bạn.Thay vì 'cách này là cách bạn chuyển đổi mã của bạn thành một sự pha trộn của phương pháp tiếp cận các mẫu thiết kế'. Tôi muốn nhiều người hơn sẽ sử dụng cách tiếp cận cũ bởi vì những người dựa vào các bậc thang cho toàn bộ khái niệm về các mẫu thiết kế là một cái tên xấu. –

1

Mẫu thiết kế nhằm mục đích bao gồm nhiều nhiệm vụ giải quyết vấn đề khác nhau. Vì vậy, trong tóm tắt, bạn cần phải có một cách để đại diện cho một loạt các công việc đang được thực hiện, và một cách để phù hợp với một mô hình thiết kế chống lại công việc đó. Làm điều này nói chung là "AI-cứng".

Một đại diện cụ thể của "công việc đang được thực hiện" rõ ràng là mã nguồn máy tính. Giờ đây, vấn đề khớp mẫu thiết kế là một trong những kết hợp với một tập hợp các đoạn mã thể hiện vấn đề quan tâm và áp dụng "mẫu" (ví dụ, giải pháp) như một tập hợp các bước sửa đổi mã nguồn để đạt được kết quả mong muốn.

Công cụ có thể diễn tả các mẫu và hiệu ứng thay đổi mã nguồn tự động này là động cơ Program Transformation. Những gì bạn thường làm với suc engine là tập hợp một tập hợp lớn các mẫu thiết kế lại với nhau, khởi tạo chúng như các bộ quy tắc viết lại nguồn, và sau đó đưa một đoạn mã vào công cụ chuyển đổi để nó có thể làm mẫu -match/thay thế bước. Công việc khó khăn nhất, tất nhiên, là viết mã các mẫu thiết kế như các quy tắc chuyển đổi, vì hầu hết các mẫu thiết kế được viết bằng văn xuôi và có chút mờ về các chi tiết chính xác. (Công cụ chuyển đổi chương trình rất khó xây dựng, nhưng những điều này được cho là đã hoàn thành)

Công cụ chuyển đổi chương trình đã được sử dụng để thực hiện cấu trúc lại (một kiểu thiết kế nổi tiếng), bản dịch ngôn ngữ ứng dụng ") và tái cấu trúc mã như định dạng lại API để đáp ứng nhu cầu mới (một ví dụ cụ thể mà tôi đã làm là tự động hóa việc chuyển đổi các API mã C++ thành CORBA-compliancy).

Các vấn đề liên quan