Học tập / Triển khai các mẫu thiết kế (Dành cho người mới) [đã đóng]


85

Tôi là một người mới và lập trình viên có sở thích bối rối đang cố gắng nắm bắt điều này, vì vậy hãy tha thứ cho tôi nếu câu hỏi của tôi hơi sai hoặc không có ý nghĩa nhiều.

Tôi thấy có rất nhiều câu hỏi trên SO xoay quanh việc sử dụng các mẫu thiết kế, và tôi tự hỏi liệu có ai có nguồn tài liệu tốt để tìm hiểu và thực hiện các mẫu thiết kế không? Tôi hiểu ý tưởng chung và biết cách / khi nào sử dụng một vài trong số chúng (phương pháp Singletons, Factory) nhưng tôi biết mình đang bỏ lỡ.

(Đề phòng trường hợp quan trọng, ngôn ngữ ưa thích của tôi là C # nhưng tôi có thể học từ các ví dụ bằng các ngôn ngữ khác)

Câu trả lời:


84

Head First Design Mẫu

văn bản thay thế

trang Wikipedia về Mẫu thiết kế là những tài nguyên tốt nhất cho người mới bắt đầu. FluffyCat là một nguồn tài nguyên trực tuyến tốt, miễn phí khác dành cho các mẫu thiết kế bằng cả JavaPHP .

Các Gang of Four cuốn sách là đi đâu sau đó, nhưng nó khá cao, vì vậy tôi muốn đợi cho đến khi bạn đã nắm khá vững chắc từ các nguồn lực khác.


4
Có C ví dụ # mã cho Head First Design Patterns sẵn tại msquaredweb.com/DesignPatterns/...
toolkit

5
Tôi nhìn cuốn sách đó ... ghét nó. Vì vậy, tôi đã chọn sách GoF và tìm hiểu tất cả về các mẫu thiết kế từ đó. Nó hơi khô khan, nhưng nhiều thông tin hơn.
Thomas Owens

1
Ban đầu tôi nghĩ rằng cuốn sách đầu tiên sẽ hoàn toàn buồn nôn (nó nặng về ẩn dụ, ẩn dụ và có một giọng điệu rất đối thoại) .. nhưng nó thực sự sáng tạo và nhiều thông tin; Tôi rất vui vì tôi đã mạo hiểm và mua nó. Imo, chọn gang-of-bốn = khổ dâm không cần thiết.
codeinthehole

2
Tôi đã tìm thấy cuốn sách đầu tiên hoàn toàn buồn nôn. Nó dành quá nhiều thời gian để được "vui vẻ" Tôi nghĩ rằng nó truyền đạt những ý tưởng chính yếu - chúng bị lạc. Đọc nó giống như đang xem một người cha nào đó cố tỏ ra thật ngầu. Nhưng sách GoF là một thái cực khác và do đó không dành cho tất cả mọi người.
Draemon

2
@Bill: Tôi biết, nhưng tôi đồng ý với nhận xét của @Thomas và @Draemon. Những người bạn không theo định hướng lập trình của tôi, những người được giới thiệu loạt sách này về thuật toán của các lớp lập trình, ghét chúng và kết thúc với những cuốn sách "khô hơn" vì lượng thông tin trên mỗi trang nhiều hơn. Đó chỉ là vấn đề sở thích. Tôi đã đọc sách kỹ thuật từ khi còn nhỏ và học ở một trường trung học kỹ thuật cao, điều đó hẳn khiến tôi quen đọc những cuốn sách “khô khan”. Tôi thích những cuốn sách không có cảnh thú cưng nói chuyện với tôi và đọc lướt qua, mà là thông tin đơn giản để tôi đồng hóa.
Esteban Küber

27

Các mẫu thiết kế rất tuyệt vì nhiều lý do:

  1. cung cấp cho bạn một khởi đầu để giải quyết các vấn đề chung.
  2. cung cấp cho các nhà phát triển vốn từ vựng để nói về một số cách giải quyết vấn đề một cách rất cô đọng.
  3. khi làm việc với các nhà phát triển biết các mẫu thiết kế và bạn sử dụng các mẫu thiết kế trong các giải pháp của mình, họ sẽ hiểu các giải pháp nhanh hơn rất nhiều.

Nhưng khi mục tiêu của bạn chỉ là học các mẫu thiết kế, tôi nghĩ bạn đang thiếu các nguyên tắc cơ bản. Tất cả các mẫu thiết kế đều dựa trên các nguyên tắc chung hơn. Độ liên kết cao, Nguyên tắc đóng mở khớp nối thấp, Nguyên tắc thay thế KHÔ, Liskov, v.v. Đối với những nguyên tắc cơ bản này, tôi sẽ đọc những cuốn sách sau theo thứ tự này:

  1. Phân tích và thiết kế hướng đối tượng đầu tiên (Head First) [MINH HỌA] (Bìa mềm)
  2. Áp dụng UML và các mẫu (Bìa cứng)
  3. Các Nguyên tắc, Mẫu và Thực hành Agile trong C # (Robert C. Martin Series) (Bìa cứng)

Sau đó, bạn đã sẵn sàng cho nhóm bốn mẫu thiết kế cơ bản

  1. Mẫu thiết kế đầu tiên (Head First) [MINH HỌA] (Bìa mềm)
  2. Kinh Thánh
  3. Một trang web đẹp (không mua bất cứ thứ gì, nó không có giá trị) http://dofactory.com/Patterns/Patterns.aspx (một số triển khai của trang này đáng để thảo luận

Bước tiếp theo:

  1. Các mẫu kiến ​​trúc ứng dụng doanh nghiệp (Dòng chữ ký Addison-Wesley) (Bìa cứng)
  2. Sách POSA

Và hãy luôn nhớ rằng: khuôn mẫu không phải là mục tiêu!


2
Tôi nghĩ các nguyên tắc cơ bản của OO (đóng gói, kế thừa, đa hình, v.v.) là đủ kiến ​​thức để bắt đầu học các mẫu thiết kế. Bạn có thể tìm hiểu các nguyên tắc khác (Liên kết cao, Nguyên tắc đóng mở khớp nối thấp, DRY, Nguyên tắc thay thế Liskov, v.v.) thông qua các mẫu học.
Bill the Lizard

Tôi đồng ý rằng bạn có thể học các mẫu thiết kế chỉ với các nguyên tắc cơ bản của OO. Nhưng sau đó bạn đã đạt đến mức bạn có thể làm cho một mẫu hoạt động nhưng vẫn chưa hiểu hết lý do tại sao đây là thiết kế tốt, bạn đã đánh đổi những gì và làm thế nào bạn có thể biến tấu các mẫu.
KeesDijk 29/10/08

20

Tôi muốn nói thêm rằng cuốn sách Mẫu thiết kế từ "Nhóm bốn người" là một cuốn kinh thánh cho bất kỳ ai quan tâm nghiêm túc đến các mẫu thiết kế.


12
Hoặc cho bất cứ ai muốn nói với bạn bè lập trình viên của họ rằng họ đã đọc Gang of Four cuốn sách :)
Dave Markle

14

Mẹo của tôi:

Đọc nhiều về các mẫu từ các nguồn khác nhau.

Cố gắng ép càng nhiều mẫu càng tốt vào tất cả mã bạn đang viết vì điểm này sẽ không mang lại kết quả tốt. Thay vào đó, hãy để thông tin nghỉ ngơi trong não bạn một lúc (đọc: tháng).

Đột nhiên, bạn sẽ thấy mình tình cờ gặp một vấn đề hoặc đoạn mã và bạn sẽ mơ hồ nhớ rằng bạn đã thấy thứ gì đó có thể hoạt động như một giải pháp cho vấn đề cụ thể này. Bây giờ là lúc để tra cứu các chi tiết về mẫu bạn đang nghĩ đến và thử áp dụng nó.

Đó là những gì đã làm việc cho tôi, dù sao.


9

Mẫu thiết kế

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

  • Mục đích 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 đi đến một mẫu
  • Quy tắc ngón tay cái khi đến mẫu.
  • Các đoạn mã cho mẫu thiết kế bao gồm C #, C ++, Delphi, Java và PHP

Trang web này cũng có hướng dẫn về Anti Patterns , UMLRefactoring .


Tôi thấy trang web rất hữu ích. Tốt, ví dụ rõ ràng.
Augustas



5

Một cuốn sách giới thiệu mà tôi thấy hữu ích và được viết tốt là Design Patterns Explained bởi Alan Shalloway và James Trott (Addison Wesley).

văn bản thay thế

Đừng không bắt đầu từ Gang of Four cuốn sách, cho nó không phải là một cuốn sách giới thiệu bởi bất kỳ phương tiện.


4

Tôi khuyên bạn nên xem xét ngũ phân vị của Jean Paul Boodhoo (?) Về Các mẫu thiết kế làm sáng tỏ trên DNRtv, các url được cung cấp bên dưới. Các videocast chạm vào Singleton, Nhà máy trừu tượng trong số những người khác - sự khác biệt là bạn có thể xem anh ta viết mã khi anh ta thảo luận về lý thuyết. Tốt để xem qua bữa trưa vào một ngày trong tuần mưa.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92


DnrTV đã ngừng hoạt động! Thật là xấu hổ vì dàn diễn viên của Boodhoo có nhiều thông tin. Bạn đã xem các video được lưu trữ ở bất kỳ nơi nào khác chưa? Bạn có tệp video không, tôi rất vui được giữ chúng trực tuyến.
Stephan Luis

4

Chú thích cho các ý kiến ​​trên.

Tham khảo nhanh về các mẫu GOF

Đây là một nơi tốt mà bạn có thể bắt đầu dofactory.com/patterns/patterns.aspx - Bạn có thể tìm thấy liên kết đến từng mẫu, cùng với các triển khai tương ứng.

Hãy nhớ rằng đây là những mẫu GOF. Bạn cũng có thể cần phải đọc và hiểu các mẫu nâng cao khi bạn có đủ kiến ​​thức chuyên môn về OOAD. Head First Design Patterns là một khởi đầu tốt và sau khi đạt được một số tiến bộ, hãy sử dụng Mẫu kiến ​​trúc ứng dụng doanh nghiệp của Martin Fowler.

Áp dụng các mẫu thiết kế - Quy trình suy nghĩ

Một khía cạnh chính khác - Áp dụng các mẫu Thiết kế cũng quan trọng như việc bạn chỉ biết chúng. Đọc những bài báo này cũng có thể giúp ích cho bạn.

Áp dụng các mẫu thiết kế Phần I

Áp dụng các mẫu thiết kế Phần II

Hi vọng điêu nay co ich


3

Head First Design Patterns là một mẫu tốt như những mẫu khác đã được lưu ý. Bên cạnh đó, tất nhiên là cuốn sách gốc và các Mẫu thiết kế C #. Ngoài ra có những trang web tốt đã được đề cập.

Bên cạnh việc tự học, tôi thực sự khuyên bạn nên bắt đầu hoặc tham gia một nhóm học theo khuôn mẫu trong khu vực của bạn. Xem Hướng dẫn Học cách Thiết kế Mẫu để biết giải thích và cách tuyệt vời để nghiên cứu các mẫu trong đó. Chúng tôi đã làm điều này và tôi có thể thành thật nói rằng tôi sẽ không hiểu nhiều như bây giờ. Một cuộc họp hàng tuần với những người quan tâm khác giúp bạn có kỷ luật đáng ngạc nhiên khi học một thứ trừu tượng như các mẫu thiết kế.

Chúc các bạn học tốt!


3

Trước khi chi tiền mua sách, tôi muốn giới thiệu trang các mẫu thiết kế tuyệt vời của Wikipedia . Ngoài ra, đối với một cái gì đó khác biệt của Google cho "các video trên màn hình mẫu thiết kế" hoặc tìm kiếm "mẫu thiết kế" trên YouTube . Nhận được cùng một thông tin được trình bày khác nhau thường giúp giảm một xu.

Nhóm bốn người cuốn sách là nội dung dứt khoát về các mô hình nổi tiếng nhất nhưng không phải là dễ dàng để đọc và với C ++ ví dụ không phải ai cũng yêu thích.

Các mẫu thiết kế đầu tiên văn bản là xa dễ tiếp cận hơn nhưng chỉ chứa một tập hợp con của Gang of Four mẫu.

Điều quan trọng nhất là hiểu vị trí và lý do tại sao một mẫu cụ thể lại hữu ích. Sau đó, tìm kiếm trên web các ví dụ triển khai bằng ngôn ngữ bạn chọn và thử nghiệm cho đến khi bạn "hiểu được". Hiểu một mẫu trước khi chuyển sang mẫu tiếp theo. Mọi người đều hiểu một số mẫu tốt hơn những mẫu khác (và có hàng trăm mẫu ít được biết đến hơn).

Chỉ cần tiếp tục cắm đi.



2

Các mẫu Kiến trúc Ứng dụng Doanh nghiệp (Bìa cứng) của Martin Fowler

Tái cấu trúc thành các mẫu (Bìa cứng) của Joshua Kerievsky

Tích hợp liên tục: Cải thiện chất lượng phần mềm và giảm rủi ro (Bìa mềm) của Paul Duval et.al.

Vượt ra ngoài kiến ​​trúc phần mềm: Tạo và duy trì các giải pháp chiến thắng (Bìa mềm) của Luke Hohmann


2

Các mẫu thiết kế cũng giống như bất kỳ chức năng thư viện nào, hãy đọc về chúng, sau đó khi có vấn đề, mẫu thiết kế sẽ nằm trong "Toolchest" của bạn. Có rất nhiều cuốn sách về mẫu thiết kế, tất cả đều được làm theo mẫu ban đầu của người sáng chế thiết kế "Nhóm bốn người".

Đối với bất kỳ lập trình viên nào, tôi nghĩ rằng điều đó và cuốn sách Refactoring của Fowler là những yêu cầu tối thiểu tuyệt đối.


Sách POSA không phải là sách "theo khuôn mẫu của GOF" - GOF tình cờ được xuất bản lần đầu - chúng được sản xuất cùng lúc.
Tim

1
Để tránh bất kỳ sự nhầm lẫn nào, tôi muốn nói rằng các mẫu thiết kế RẤT NHIỀU NHẤT KHÔNG được triển khai trong thư viện. Nhiều mẫu được hình thành bằng cách kết hợp các lớp thư viện với nhau.
cho Lizard

Tôi đã làm cho nó giống như có thể được thực hiện trong một thư viện - xin lỗi về điều đó, cảm ơn vì đã giải thích rõ, Bill. Các mẫu thiết kế thường giống như thư viện nhưng những thứ bạn thường không thể PUT trong thư viện - như các cách khác nhau mà các lớp chưa biết với nhau tương tác.
Bill K


2

Cuốn sách Mẫu thiết kế ban đầu là cuốn sách phải đọc cho tất cả các lập trình viên.

Nó là một cuốn sách xuất sắc ở mọi cấp độ: bố cục, rõ ràng, sâu sắc, sâu sắc. Đó là một trong những cuốn sách tuyệt vời mà bạn đọc đầu tiên từ đầu đến cuối, sau đó sử dụng làm tài liệu tham khảo cho đến khi bạn thực sự biết nó từ trong ra ngoài.

Bạn có thể bắt đầu bằng trang Wikipedia , nhưng hãy tự thưởng cho mình một cuốn sách tuyệt vời.


2

Áp dụng UML và các mẫu của Craig Larman. Bắt đầu từ cơ bản của phân tích, thiết kế và sử dụng một tình huống Case đơn giản. Giới thiệu hầu hết các mẫu cơ bản một cách đơn giản.


2

Nếu bạn đọc về các mẫu thiết kế, bạn sẽ nhận thấy rằng Java dường như có một vài trong số chúng được triển khai.

Hãy xem nguồn của bất kỳ khuôn khổ nào và bạn có thể thu thập thông tin về các mẫu thiết kế. Cá nhân tôi không thấy chúng hoàn toàn phù hợp với bất kỳ mã nào của tôi, đôi khi các ví dụ trong sách và hướng dẫn có vẻ hơi lý tưởng hóa, đặc biệt là đối với các lập trình viên đơn lẻ.

Các mẫu thiết kế không dành cho những lập trình viên lười biếng.


2

Đối với tôi và các đồng nghiệp của tôi nghiên cứu Mẫu thiết kế theo sau trên Nhóm Nghiên cứu Mẫu . Họ chuẩn bị danh sách từng mẫu mà chúng ta nên học theo thứ tự và cũng có các câu hỏi mở đầu để thảo luận trong nhóm nhiều hơn.


1

Tôi cũng khuyên bạn nên có một shufty tại Refactoring to Patterns khi bạn đã đọc Head First Design Patterns.

Lưu ý: Các ví dụ mã bằng Java, nhưng phải rất giống với các ví dụ C # ...


1

Đối với tôi, đối với một người có rất ít kinh nghiệm thì việc nghiên cứu quá sâu về các mẫu thiết kế không có ý nghĩa gì. Thật tuyệt khi biết chúng tồn tại, nhưng lúc này bạn nên tập trung nhiều hơn vào những thứ khác hơn là chỉ tìm hiểu về các mẫu thiết kế.

Chúng hữu ích trong bối cảnh của một vấn đề - như một khái niệm đối với một nhà phát triển mới / người mới bắt đầu, chúng thực sự không có quá nhiều giá trị thực tế ngoài hình thức biết rằng bạn nên sử dụng chúng khi nào và ở đâu bạn có thể.

CHỈNH SỬA Để làm rõ - nhiều mẫu thiết kế là kết quả của các vấn đề được tìm thấy trong một số lĩnh vực. Một lập trình viên mới khó có thể được mong đợi (IMO) biết (các) mẫu thiết kế để sử dụng cho một số vấn đề. Cũng giống như chúng ta hiểu rõ hơn về các thuật toán trong các nghiên cứu CS, chúng ta cần hiểu những điều chúng ta có thể làm với các mẫu và lợi ích của chúng, nhưng khi một người vẫn đang xây dựng hello world hoặc khám phá ra stl thì không có nhiều nhu cầu thực tế về các mẫu thiết kế. Hoa văn là tuyệt vời. Nhưng chúng không phải là viên đạn bạc.

(Không phải là CASE (công cụ), cũng không phải là / UML, cũng không phải là SCRUM, cũng không phải là TDD, cũng không phải là STL, cũng không phải Java, cũng không phải XML, v.v.) Tất cả chỉ là khía cạnh chuyên môn của chúng tôi và coi các chủ đề này là chủ đề thứ hai đến là ngây thơ.


Nhưng nếu bạn không biết về các mẫu, bạn sẽ không biết liệu có một mẫu nào đó giải quyết vấn đề cụ thể của bạn hay không. Đúng, là một người mới, bạn không có khả năng CẦN một mẫu, nhưng điều quan trọng là phải học các mẫu trước khi nhu cầu đó xuất hiện.
Elie

Tôi nghĩ rằng tôi đã đề cập đến điều đó trong bài đăng của mình ...
Tim

Bạn cần có nhiều thứ hơn là chỉ biết rằng chúng tồn tại .... bạn cần biết chúng hoạt động như thế nào và loại tình huống mà chúng được sử dụng. Đó là một chút hơn kiến ​​thức hời hợt. Có thể mất nhiều năm trước khi bạn sử dụng một mẫu, nhưng khi bạn làm vậy, không phải lúc để học mẫu.
Elie

Vì vậy, bạn đang nói một người mới phải học và hiểu hàng tá hoặc nhiều hơn các mẫu? Điều gì xuất hiện trong thời gian chờ đợi? Tôi không tranh luận chống lại các khuôn mẫu. Và tôi cũng không nghĩ rằng việc tìm hiểu các chi tiết cụ thể của một mẫu JIT là một điều xấu. Học các mẫu trước khi IMO nội dung khác không hữu ích
Tim

1

Các mẫu bao gồm vốn từ vựng cấp cao mà các lập trình viên sử dụng để nói về thiết kế trừu tượng. Nếu bạn đang sử dụng lại một giải pháp trừu tượng, sẽ rất hữu ích nếu bạn tham khảo nó theo tên. Nếu bạn phát minh ra một mẫu, việc kiểm tra một chút để đảm bảo rằng nó chưa được đặt tên là một việc làm chuyên nghiệp. Nếu nó đã được đặt tên, thì mô tả có thể hữu ích.

Sau khi bạn viết mã dù chỉ một chút, bạn sẽ nhận thấy mình đang viết một thứ tương tự như những gì bạn đã viết mã trước đó. Đây là một mô hình. Ngay cả khi nó là một mô hình nhỏ, nó là đáng chú ý. Có một mô hình tốt hơn? Bạn có thấy một số mẫu nhỏ nhất định hợp tác với nhau để giải quyết một vấn đề lớn hơn không? Lần sau, khi bạn muốn giải quyết một vấn đề lớn hơn, toàn bộ khuôn mẫu sẽ xuất hiện trong tâm trí bạn như một đoạn duy nhất. Việc tạo ra các dòng mã chi tiết trở thành máy móc.

Bạn càng chú ý đến các mẫu, việc lập trình càng trở nên dễ dàng hơn và bạn sẽ càng đánh giá cao một số mẫu lớn nhất và tốt nhất do các lập trình viên khác làm ra. Hãy thử làm chủ mẫu MVC. Bằng cách này hay cách khác, các biến thể hiển thị khắp nơi, ngay cả trong các quyết định thiết kế nhỏ.


1

Một khi bạn hiểu khái niệm, hãy xem qua mã nguồn hoặc thiết kế của Eclipse, rất nhiều ví dụ thực sự tốt về các mẫu này (không ngạc nhiên, Gamma là một trong những nhà thiết kế).


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.