Có một cuốn sách kinh điển về các mẫu thiết kế? [đóng cửa]


49

Tôi quan tâm đến việc học các mẫu thiết kế và muốn biết những gì được coi là sách hàng đầu trong việc học môn học này.

Có một cuốn sách ngoài đó là tiêu chuẩn thực tế để mô tả các thực tiễn tốt nhất, phương pháp thiết kế và thông tin hữu ích khác về các mẫu thiết kế? Điều gì về cuốn sách làm cho nó đặc biệt?


Tôi không chắc đây có phải là điều bạn đang nghĩ không, nhưng tôi tìm thấy rất nhiều công cụ phát triển thông minh trên Forrst .
Trey Piepmeier

2
Làm thế nào về một tiêu đề "Nguồn tham khảo cho các mẫu thiết kế" hoặc "Tài nguyên mẫu thiết kế" (vì tôi không có nghĩa là "tham chiếu" như chỉ "tìm kiếm theo yêu cầu") và di chuyển tất cả các công cụ danh sách vào phần thân (hoặc loại bỏ nó )?


Đối với một số triển khai tốt, tôi thường xem qua những cái trên dofactory (mặc dù không mua sách).
Steven Evers

4
Với câu hỏi này đã nhận được câu trả lời đầy đủ và toàn diện, tôi đã đóng các câu hỏi mẫu thiết kế khác dưới dạng trùng lặp của câu hỏi này để chỉ định nó là cặp câu hỏi và trả lời chính tắc cho chủ đề này.

Câu trả lời:


58

Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng rất gần với định nghĩa của tôi về một cuốn sách kinh điển về các mẫu thiết kế. Theo bài viết trên wikipedia của nó (nhấn mạnh của tôi):

Ngày xuất bản ban đầu của cuốn sách là ngày 21 tháng 10 năm 1994 với bản quyền năm 1995 và tính đến tháng 7 năm 2010, cuốn sách đã được in lần thứ 38 . Cuốn sách lần đầu tiên được cung cấp cho công chúng tại cuộc họp OOPSLA được tổ chức tại Portland, Oregon, vào tháng 10 năm 1994. Nó có ảnh hưởng lớn đến lĩnh vực công nghệ phần mềm và được coi là một nguồn quan trọng cho lý thuyết và thực hành thiết kế hướng đối tượng. Hơn 500.000 bản đã được bán bằng tiếng Anh và 13 ngôn ngữ khác .

Ward Castyham , người tiên phong về thiết kế mẫu, duy trì một danh mục trực tuyến các mẫu của cuốn sách trên WikiWikiWeb . Và theo bài viết Wikipedia về mẫu thiết kế (một lần nữa, nhấn mạnh của tôi):

Các mẫu thiết kế đã trở nên phổ biến trong khoa học máy tính sau cuốn sách Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng được xuất bản năm 1994 bởi cái gọi là "Gang of Four" (Gamma et al.).

Có khá nhiều cuốn sách khác được tham khảo trong cùng một bài viết là đáng chú ý trong thể loại:

Trong số những người tôi đã đọc cuốn sách của Fowler, nó có ảnh hưởng lớn và đọc tốt. Ở một số điểm nhất định, nó hơi mơ hồ đối với sở thích của tôi, nhưng nhìn chung nó là một cuốn sách thú vị. Có một danh mục trực tuyến về các mẫu có trong cuốn sách, với các mô tả tối thiểu.

Tôi cũng đã đọc lướt qua các mẫu thiết kế đầu tiên và nếu bạn đã đọc bất kỳ cuốn sách nào khác của sê-ri Head First, nó có chất lượng cao và thú vị như hầu hết các cuốn sách trong sê-ri :

Head First là một loạt các sách hướng dẫn giới thiệu cho nhiều chủ đề, được xuất bản bởi O'Reilly Media. Nó nhấn mạnh một sự kết hợp không chính thống, trực quan, liên quan đến người đọc, bao gồm các câu đố, truyện cười, thiết kế và bố cục không chuẩn, và một phong cách trò chuyện hấp dẫn để đưa người đọc vào một chủ đề nhất định.

Thuật ngữ "mẫu thiết kế" hơi mơ hồ, vì mọi giải pháp tái sử dụng chung có thể được coi là một mẫu thiết kế. Tôi luôn nhận thấy xu hướng áp dụng nhãn trên các giải pháp được mô tả trong một trong những cuốn sách đáng chú ý mà tôi đã liệt kê ở trên, và cụ thể hơn là các cuốn sách Gang of Four và Fowler. Các mẫu thiết kế không tuân theo một quy trình phát triển độc đáo, chúng là các giải pháp phần mềm thông thường có khả năng tái sử dụng vô cùng lớn và chúng cực kỳ khó xác định .

Nhưng nếu bạn so sánh các danh mục trực tuyến cho cả hai cuốn sách với nội dung của các cuốn sách cụ thể về ngôn ngữ, bạn sẽ nhận thấy rằng chúng thường được sử dụng làm mẫu. Vì vậy, tôi muốn nói rằng cả hai cuốn sách đều rất gần với tài liệu tham khảo chính tắc, với cuốn sách GoF là cuốn sách quan trọng hơn từ góc độ lịch sử, mặc dù cả hai cuốn sách đều bị giới hạn trong lập trình hướng đối tượng .


2
+1. Thật ra tôi muốn cho bạn +5 nhưng than ôi không được phép.
Dipan Mehta

Toàn bộ loạt Kiến trúc phần mềm hướng mẫu là về các mẫu trong các loại hệ thống khác nhau - Tập 1 nói về các mẫu kiến ​​trúc và các mẫu cắt ngang, Tập 2 là về các hệ thống đồng thời, Tập 3 là về quản lý tài nguyên trong các hệ thống phân tán / mạng, Tập 4 là về các hệ thống phân tán và Tập 5 là về các ngôn ngữ mẫu cũng như tài liệu tham khảo cho 4 tập khác. Đưa ra câu hỏi, tôi nghĩ rằng Tập 5 cũng có thể áp dụng được, nhưng tôi chưa dành quá nhiều thời gian cho nó ....
Thomas Owens

@Yannis cái này và đầu tiên thường dựa trên các ngôn ngữ gõ tĩnh. Có những cuốn sách hay cho các ngôn ngữ năng động như python.
ravi404


27

Cuốn sách Gang of Four - Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng có lẽ là thứ gần nhất chúng ta có với một tiêu chuẩn công nghiệp về các mẫu thiết kế.

Để giới thiệu dễ tiếp cận hơn, Head First: Design Forms cũng tốt. Đừng bỏ qua trang bìa 'hợp thời trang', vì đây là một cuốn sách hay và có thể sẽ giúp bạn nắm bắt các khái niệm trong cuốn sách GoF dễ dàng hơn rất nhiều nếu bạn đọc nó trước.


23

Mẫu thiết kế đầu tiên

Tại bất kỳ thời điểm nào, một nơi nào đó trên thế giới đều có người đấu tranh với cùng các vấn đề thiết kế phần mềm mà bạn gặp phải. Bạn biết rằng bạn không muốn phát minh lại bánh xe (hoặc tệ hơn là lốp xe bị xẹp), vì vậy bạn hãy tìm đến Mẫu thiết kế - những bài học mà những người đã gặp phải vấn đề tương tự. Với Mẫu thiết kế, bạn có thể tận dụng các thực tiễn và kinh nghiệm tốt nhất của người khác, để bạn có thể dành thời gian cho ... thứ khác. Một cái gì đó thách thức hơn. Một cái gì đó phức tạp hơn. Một cái gì đó vui hơn.

Bạn muốn tìm hiểu về các mẫu quan trọng - tại sao nên sử dụng chúng, khi nào sử dụng chúng, làm thế nào để sử dụng chúng (và khi nào KHÔNG sử dụng chúng). Nhưng bạn không chỉ muốn xem các mẫu trông như thế nào trong một cuốn sách, bạn muốn biết chúng trông như thế nào "trong tự nhiên". Trong môi trường bản địa của họ. Nói cách khác, trong các ứng dụng thế giới thực. Bạn cũng muốn tìm hiểu cách các mẫu được sử dụng trong API Java và cách khai thác hỗ trợ mẫu có sẵn của Java trong mã của riêng bạn.

Bạn muốn tìm hiểu các nguyên tắc thiết kế OO thực sự và tại sao mọi thứ mà sếp của bạn nói với bạn về quyền thừa kế có thể sai (và phải làm gì thay thế). Bạn muốn tìm hiểu làm thế nào những nguyên tắc đó sẽ giúp ích cho lần tới khi bạn lên một con suối mà không có mẫu thiết kế.

Quan trọng nhất, bạn muốn học "ngôn ngữ bí mật" của các Mẫu thiết kế để bạn có thể giữ riêng với đồng nghiệp của mình (và gây ấn tượng với khách dự tiệc cocktail) khi anh ta đề cập đến việc sử dụng Command, Facade, Proxy và Nhà máy ở giữa những ngụm martini. Bạn sẽ dễ dàng phản bác lại sự hiểu biết sâu sắc của bạn về lý do tại sao Singleton không đơn giản như âm thanh, cách mà Nhà máy thường bị hiểu lầm hoặc về mối quan hệ thực sự giữa Decorator, Facade và Adaptor.

Với các mẫu thiết kế đầu tiên , bạn sẽ tránh được sự bối rối khi nghĩ Trang trí là thứ gì đó từ chương trình "Giao dịch không gian" ...


Điều này. Đây là một bài đọc rất dễ tiếp cận và đã thay đổi cách tôi tiếp cận hoàn toàn với công nghệ phần mềm.
GSto

2
toàn bộ loạt đầu tiên là tuyệt vời, đặc biệt là cho các nhà phát triển bắt đầu.
Thomas Stock

2
Tôi yêu cuốn sách, nhưng hoàn toàn ghét bìa! Một đồng nghiệp không phải lập trình viên của tôi đã đi ngang qua văn phòng của tôi vào một ngày khác, nhìn thấy cuốn sách và nói "Head First Designer Forms? Bạn có định kinh doanh thời trang không?"
Pete

1
@Pete Tại sao trang bìa có thể khiến bạn gặp nhiều rắc rối hơn. Cô ấy rõ ràng sống một cuộc sống hai mặt. fishbowl.pastiche.org/2005/08/12/ Lời
Gordon

10

Vâng, có một cuốn sách nổi tiếng về các mẫu thiết kế: Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng và các tác giả thường được gọi là "Gang of Four" (GoF) và được tham khảo trong hầu hết các văn bản về các mẫu thiết kế.


Ngoài ra cuốn sách của Martin Fowler: amazon.com/Potypes- Entryprise
Robert Harvey

Đây không phải là một cuốn sách về các mẫu thiết kế. Đó là một danh mục các mẫu. Ban đầu có một giới thiệu ngắn về các mẫu thiết kế, nhưng tôi không nghĩ rằng giới thiệu đó là đủ.
Jörg W Mittag

@ JörgWMittag Không có một quy trình duy nhất để tạo các mẫu thiết kế, các mẫu thiết kế là các giải pháp tái sử dụng tương đối nhỏ. Các mẫu thiết kế được tạo ra thông qua các quy trình phát triển phần mềm thông thường, điều làm nên sự khác biệt của chúng là khả năng tái sử dụng to lớn của chúng. Quá trình duy nhất có liên quan duy nhất là xác định một giải pháp là một mẫu thiết kế và các danh mục thực hiện điều đó một cách tinh vi.
yannis

9

Các mẫu thiết kế: các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng

văn bản thay thế

Từ wikipedia :

Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng là một cuốn sách kỹ thuật phần mềm mô tả các giải pháp định kỳ cho các vấn đề phổ biến trong thiết kế phần mềm. Các tác giả của cuốn sách là Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides với lời tựa của Grady Booch. Các tác giả thường được gọi là Gang of Four, GoF hoặc Go4. Cuốn sách được chia thành hai phần, với hai chương đầu tiên tìm hiểu các khả năng và cạm bẫy của lập trình hướng đối tượng và các chương còn lại mô tả 23 mẫu thiết kế phần mềm cổ điển. Cuốn sách bao gồm các ví dụ trong C ++ và Smalltalk.


3

Một trong những trang web mẫu thiết kế tốt nhất xung quanh là Ward's Wiki, wiki đầu tiên. Xem http://c2.com/cgi/wiki?HistoryOfPotypes để biết trang bắt đầu tốt trong đó.

Vào năm 1987, Ward và Kent đã tham khảo ý kiến ​​với Tập đoàn Hệ thống thử nghiệm bán dẫn của Tektronix đang gặp khó khăn khi hoàn thiện một thiết kế. Họ quyết định thử những thứ mà họ đang nghiên cứu. Giống như Alexander đã nói những người chiếm giữ một tòa nhà nên thiết kế nó, Ward và Kent cho phép đại diện của người dùng (một huấn luyện viên và một kỹ sư hiện trường) hoàn thành thiết kế.

Ward đã đưa ra một "ngôn ngữ" năm mẫu giúp các nhà thiết kế mới làm quen tận dụng điểm mạnh của Smalltalk và tránh điểm yếu của nó ...

Ward và Kent đã rất ngạc nhiên trước sự sang trọng (thừa nhận của Spartan) của giao diện mà người dùng của họ thiết kế. Họ đã báo cáo kết quả của thí nghiệm này tại OOPSLA 87 ở Orlando. Họ đã viết lên một vị trí bảng điều khiển, và trình bày tại hội thảo của Norm Kerth về các vật thể đến từ đâu? Họ nói chuyện với nhau cho đến khi mặt họ xanh xao, và có rất nhiều thỏa thuận, nhưng không có nhiều mẫu cụ thể hơn, không ai đăng ký.

Trong khi đó, Erich Gamma đang bận viết và phản ánh về thiết kế hướng đối tượng trong ET ++ như một phần của luận án tiến sĩ của mình. Erich đã nhận ra rằng các cấu trúc hoặc mẫu thiết kế định kỳ là quan trọng. Câu hỏi thực sự là làm thế nào để bạn nắm bắt và truyền đạt chúng.

Bruce Anderson đã nói chuyện tại CÔNG CỤ 90 mà ErichGamma có mặt; Erich thích nói chuyện. Bruce đã đưa ra một bài báo tại EcoopOopsla90 (Ottawa) và điều hành một BOF có tên Toward a Architecture Handbook nơi anh ấy, Erich Gamma, Richard Helm, và những người khác đã thảo luận về các mẫu. Đó là lần đầu tiên Richard và Erich gặp nhau, và họ nhận ra rằng họ đã chia sẻ những ý tưởng chung về những ý tưởng chính đằng sau việc viết phần mềm OO có thể tái sử dụng.

Ngay trước ECOOP'91 Erich Gamma và Richard Helm, ngồi trên sân thượng ở Zurich vào một ngày hè oi ả, tập hợp những khởi đầu rất khiêm tốn của danh mục các mẫu cuối cùng sẽ trở thành DesignPotype ...

Mọi thứ thực sự bắt đầu tại hội thảo OOPSLA mà Bruce điều hành năm 1991. Thật trùng hợp, Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides đều ở đó; sau này họ trở thành Gang of Four , tác giả của cuốn sách Mẫu thiết kế ...


2

Tôi nghĩ rằng Tái cấu trúc cho các mẫu có thể hữu ích chỉ đơn giản vì nó mô tả mức độ mong muốn / mã nhất định có thể được tái cấu trúc theo các mẫu trong sách GoF. Điều này có thể giúp vượt qua đường cong học tập ban đầu. Ồ và nó cũng được chiêm ngưỡng về 'Hạnh phúc mẫu mực' :)

Bạn cũng có thể thấy ba tập đầu tiên của Kiến trúc phần mềm hướng mẫu là dễ đọc.


1

Mẫu thiết kế

Trang web hướng dẫn này chứa các phần phụ sau

  • Ý định của từng mẫu thiết kế
  • Cấu trúc thế giới thực cho mẫu thiết kế
  • Một báo cáo vấn đề
  • Thảo luận chi tiết về vấn đề
  • Danh sách kiểm tra về cách đến một mẫu
  • Quy tắc của ngón tay cái trong khi đến mẫu.
  • Đoạn mã cho mẫu thiết kế bao gồm C #, C ++, Delphi, Java và PHP

Trang web này cũng chứa hướng dẫn về Chống mẫu, UML và Tái cấu trúc.


Trang web SourceMaking thoạt nhìn có vẻ đơn giản, nhưng nó thực sự là một tài liệu tham khảo tuyệt vời. Bên cạnh các mẫu thiết kế, một số antipotype phát triển, kiến ​​trúc & quản lý dự án rất vui nhộn. Các giải pháp được cấu trúc lại thực sự có thể giúp bạn lưu một cuộc họp đang diễn ra. (Không tệ đối với tham chiếu mẫu thiết kế)
Bất kể

1

Cuốn sách gốc "Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng" là một tài nguyên tốt cho các mẫu thiết kế hướng đối tượng.

Có nhiều sách khác ngoài kia. Khi tôi cần một tài liệu tham khảo nhanh và cuốn sách GoF của tôi nằm ngoài tầm với, Wikipedia thường có đủ thông tin về những mẫu đó và các mẫu thiết kế khác.

Đó là những cái chính tôi sử dụng. Cũng cần lưu ý rằng mọi người đã bắt đầu áp dụng định dạng mẫu cho những thứ khác, chẳng hạn như quản lý dự án.

Nếu bạn muốn biết về antipotype, mà bạn nên biết, có hai cuốn sách "AntiPotype: Phần mềm tái cấu trúc, Kiến trúc và Dự án trong Khủng hoảng" cũng như "Tái cấu trúc: Cải thiện Thiết kế của Mã hiện tại" có một phần về mã mùi, một tên khác cho antipotype.


1

"Nguyên tắc, mô hình và thực tiễn nhanh nhẹn trong C #" của Robert C. Martin. Tôi nghĩ rằng anh ấy cũng có một phiên bản Java của cuốn sách.

Ngoài ra, bản thân nó không phải là một mẫu, nhưng Domain Driven Design có một số khái niệm tuyệt vời ngay cả khi bạn không sử dụng phương pháp DDD đầy đủ.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

1

Nếu bạn quan tâm đặc biệt đến các mẫu thiết kế trong C ++, hãy thử Modern C ++ Design của Andrei Alexandrescu.

Cuốn sách này nói về cách triển khai các mẫu thường được sử dụng như Factory, Singleton và Khách truy cập trong C ++. Nó cũng nói về rất C ++ - các chủ đề cụ thể như con trỏ thông minh, siêu lập trình mẫu và thiết kế lớp dựa trên chính sách.

Tác giả sách là một chuyên gia có thẩm quyền , được biết đến với

công việc tiên phong về thiết kế dựa trên chính sách được thực hiện thông qua siêu lập trình mẫu. Những ý tưởng này được nêu rõ trong cuốn sách Modern C ++ Design của anh ấy và lần đầu tiên được thực hiện trong thư viện lập trình của anh ấy, Loki. Ông cũng đã thực hiện khái niệm "nhà xây dựng di chuyển" trong thư viện MOJO của mình. Ông đã đóng góp cho Tạp chí người dùng C / C ++ dưới dòng "Chung <Lập trình>" ...


1
bạn có phiền giải thích thêm về những gì nó làm và những gì nó tốt cho? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

@gnat: cái này thế nào?
Dima

Vâng, chỉnh sửa gần đây của bạn chắc chắn có vẻ là một cải tiến đối với tôi. Mặc dù độc giả của câu trả lời có thể sẽ được hưởng lợi từ một lời giải thích chi tiết hơn về aiAleksandresku
gnat

@gnat: vì bạn rõ ràng biết anh ấy là ai, xin vui lòng chỉnh sửa câu trả lời của tôi.
Dima
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.