รูปแบบการออกแบบ: ฉันควรเรียนรู้พวกเขา? [ปิด]


13

ดังนั้นมันค่อนข้างแปลกที่ถามคำถามสองข้อย้อนหลัง แต่พวกเขาไม่เกี่ยวข้องกันมากและฉันไม่ต้องการรวม แต่ฉันไม่ใช่คำถามสแปมฉันสัญญา!

อย่างไรก็ตามฉันเป็นบัณฑิตวิทยาลัยเมื่อไม่นานมานี้และการศึกษาของฉันได้สัมผัสกับรูปแบบการออกแบบเท่านั้น ... เราดำเนินการเรียบง่ายเพียงไม่กี่สัมผัสกับความจริงที่ว่ามีคนที่ซับซ้อนมากขึ้นและได้รับคำสั่งให้หันไปใช้หนังสือ GoF ถ้าเรา ต้องการเรียนรู้เพิ่มเติม คำถามของฉันคือมันคุ้มค่าที่จะเรียนรู้รูปแบบในหนังสือ GoF หรือไม่? สำหรับฉันแล้วมันดูเหมือนเคาน์เตอร์ธรรมดาที่จะพยายามทำปัญหาให้พอดีกับรูปแบบคลาสสิค แต่เห็นได้ชัดว่าหนังสือและรูปแบบมีชื่อเสียงด้วยเหตุผล พวกเขาปรากฏตัวเพียงพอที่ฉันควรจะเรียนรู้พวกเขา?

ขอบคุณอีกครั้ง!


คุณอ่านคำถามอื่น ๆ ที่ติดแท็กเป็น [รูปแบบการออกแบบ] หรือไม่?
Peter Taylor

คนที่แนะนำก่อนที่ฉันโพสต์ดูเหมือนว่าส่วนใหญ่จะขอทรัพยากรที่ดีหรือพูดคุยเกี่ยวกับวิธีที่ดีที่สุดในการเรียนรู้พวกเขา ฉันสามารถเรียนรู้ด้วยตัวเองฉันแค่อยากรู้ว่ารูปแบบคลาสสิกถูกนำไปใช้อย่างไร ขออภัยถ้าเป็น repost อย่าลังเลที่จะปิด
รีลิค

1
ฉันไม่คิดว่ามันเป็น repost ที่แน่นอน แต่ฉันสงสัยในสิ่งที่คุณต้องการซึ่งไม่ได้มาจากคำตอบของโปรแกรมเมอร์ เช่นprogrammers.stackexchange.com/questions/84098/…programmers.stackexchange.com/questions/78825/…
Peter Taylor

อย่างน้อยมีคนอ้างถึงในวิทยาลัย ฉันไม่เคยได้ยินเรื่องนี้จนกว่าฉันจะเริ่มสัมภาษณ์งานโพสต์วิทยาลัยครั้งที่สอง (ซึ่งเห็นได้ชัดว่าฉันไม่เหมาะเพราะฉันไม่เคยได้ยินเรื่องซิงเกิลและรู้ถึงกลไกของรูปแบบ)
Mayo

คำตอบ:


12

เหมือนอย่างเคย

มันขึ้นอยู่กับ

ขึ้นอยู่กับว่าคุณทำ OOP ได้มากน้อยแค่ไหนหรือว่าคุณจะจำหรือแม้กระทั่งสามารถใช้รูปแบบการออกแบบได้

ขึ้นอยู่กับว่าคุณมีระเบียบวินัยหรือไม่ว่าคุณจะใช้รูปแบบที่เคยเรียนรู้มาอย่างถูกต้องหรือไม่และไม่ไปหาถั่วเหมือนคนที่มีเล่ห์เหลี่ยมด้วยค้อน

ในอีกทางหนึ่ง ... ห้านิ้ว!

หากคุณทำงาน OOP อย่างจริงจังสองสามปีหรือคุณมีที่ปรึกษาที่เชื่อถือได้เพื่อให้คุณอยู่บนรางรถไฟหรือคุณชอบอ่าน OOP-nerd จากนั้นลองซื้อหนังสือและศึกษาดู

มันจะช่วยให้รู้รูปแบบเพื่อให้คุณจดจำได้ว่าจะใช้เมื่อใดและเมื่อใดที่จะไม่ใช้


ฉันคิดได้มาก เพียงแค่อยากรู้อยากเห็นถ้าคุณต้องเลือกไม่กี่คนที่คุณจะพิจารณาแนวคิดที่สำคัญที่สุดหรือเป็นที่นิยมมากที่สุดพวกเขาจะเป็นอย่างไร
รีลิค

1
@prelic: ซิงเกิล - เนื่องจากข้อพิพาทรอบ ๆ - และผู้เข้าชม - เพราะมันมีประโยชน์มาก
Steven A. Lowe

2
@prelic: ฉันจะเริ่มต้นด้วยกลยุทธ์และการสังเกตการณ์ - เพราะพวกเขาจึงมีประโยชน์ยี้
เหยี่ยว

1
+1 ความคิดเห็นที่ดีที่สุดในหัวข้อนี้! รูปแบบที่ฉันใช้เป็นประจำ: คำสั่งอะแดปเตอร์และวิธีการจากโรงงาน
Oliver Weiler

สิ่งที่ฉันใช้เช่นการหายใจคือ Singleton, Template Method, Decorator และ Composite และ Iterator แต่มักจะอยู่ในหน้ากากของ a java.util.Iteratorซึ่งแทบจะดูเหมือนเป็นลวดลาย กลยุทธ์ผู้เข้าชมและซุ้มจะเป็นคนที่ฉันใช้อย่างมีสติเมื่อฉันเห็นความต้องการสำหรับพวกเขา
Tom Anderson

21

ใช่คุณควรเรียนรู้พวกเขา

ยิ่งไปกว่านั้นให้ทบทวนอีกครั้งหลังจากที่คุณได้รับประสบการณ์เพื่อให้คุณสามารถเปรียบเทียบพวกเขากับสิ่งที่คุณรู้ สำหรับรูปแบบบางอย่างมันจะกลายเป็นว่านี่เป็นสิ่งที่คุณค้นพบด้วยตัวคุณเอง แต่คุณจะได้เรียนรู้สิ่งที่เป็นเรื่องทั่วไปเกี่ยวกับการใช้งานการแลกเปลี่ยนรูปแบบและอื่น ๆ คนอื่นอาจแก้ไขปัญหาที่คุณเผชิญโดยตรงและแสดงวิธีแก้ปัญหาที่คุณไม่ทราบ

ที่ดีส่วนใหญ่ของรูปแบบที่มีประโยชน์มากและบ่อย คนอื่นอาจไม่ได้รับความนิยม แต่ก็ยังมีการใช้งานแคบ ๆ

: มีเหตุผลหนึ่งที่ว่าทำไมมันเป็นมูลค่าการอ่านมันจะสอนวิธีการคิด แน่นอนว่ามันไม่ใช่กระสุนเงิน แต่เป็นแรงบันดาลใจที่ประเมินค่ามิได้

สุดท้าย แต่ไม่ท้ายสุดไม่เคยไม่ว่าภายใต้สถานการณ์ใดลองและสร้างปัญหาให้เหมาะกับรูปแบบหรือเครื่องมือ นั่นเป็นความคิดที่ไม่ดีและอันตราย! ทำความเข้าใจว่าเครื่องมือทำงานอย่างไรและใช้งานอย่างชาญฉลาดเพื่อจัดการกับปัญหา

ยิ่งคุณรู้จักเครื่องมือมากเท่าไหร่ก็ยิ่งดีเท่านั้น บางครั้งเครื่องมือสามารถสร้างแรงบันดาลใจให้กับความคิดของคุณ (แทนที่จะแก้ปัญหาโดยตรง) อีกครั้งที่คุณจะรวมมันเข้าด้วยกันเพื่อหาทางออกที่ดี

หนังสือขาดเป็นแหล่งที่ดีของเครื่องมือที่มีประโยชน์หลายอย่างที่เราใช้ในชีวิตประจำวัน


ขอบคุณสำหรับคำแนะนำที่ดี! ฉันหวังว่าฉันจะให้เครื่องหมายถูกหลายอัน
รีลิค

6

ประโยชน์ที่สำคัญที่สุดจากการรู้เพียงเล็กน้อยเกี่ยวกับ Design Patters คือคุณรู้ว่าคำศัพท์เหล่านี้หมายถึงอะไร ในคำอื่น ๆ ที่คุณรู้คำศัพท์ทั่วไป

นี่คือความสำเร็จที่สำคัญที่สุดของความวุ่นวายในรูปแบบการออกแบบซึ่งเป็นคำศัพท์ทั่วไปที่เกิดขึ้นที่คุณสามารถใช้ชื่อของรูปแบบเฉพาะและคนอื่นรู้ทันทีว่าคุณกำลังพูดถึงอะไรโดยที่คุณไม่ต้องอธิบาย . สิ่งที่รูปแบบการอธิบายเป็นที่รู้จักกันดีในโปรแกรมเมอร์ส่วนใหญ่ แต่ต้องใช้เวลาในการอธิบายสิ่งที่คุณหมายถึงผู้อื่นดังนั้นจึงทำให้การสื่อสารรู้จักชื่อรูปแบบได้ง่ายขึ้น

ตัวอย่างเช่นผู้เยี่ยมชมซิงเกิลและมัณฑนากร

ดังนั้นในคำอื่น ๆ ฉันขอแนะนำให้คุณทำความคุ้นเคยกับชื่อและสิ่งที่พวกเขาทำ


5

ใช่ แต่ด้วยความระมัดระวัง!

ส่วนที่ใช่:

บางครั้งเราพบปัญหาในการออกแบบของเรา บางครั้งปัญหาเหล่านั้นเป็นเรื่องธรรมดามากดังนั้นรูปแบบการออกแบบจึงให้การทดสอบที่ดีแก่คุณสำหรับปัญหาเหล่านั้น ประโยชน์หลักของการเรียนรู้รูปแบบการออกแบบคือคุณสามารถหาวิธีแก้ปัญหาการออกแบบได้เร็วขึ้นมากและถ้าเพื่อนร่วมงานของคุณรับรู้รูปแบบการออกแบบศัพท์แสงคุณสามารถอธิบายวิธีแก้ปัญหาได้เร็วขึ้นเช่นกัน

ส่วนที่มีความระมัดระวัง:

รูปแบบการออกแบบไม่ควรเป็นจอกศักดิ์สิทธิ์ของทางแก้ปัญหาของคุณ วิธีแก้ปัญหาที่ง่ายที่สุด (KISS) เป็นที่ต้องการมากกว่าและหลายครั้งที่รูปแบบการออกแบบจะทำให้สิ่งต่าง ๆ มีความซับซ้อนมากขึ้น หากคุณกำลังเรียนรู้รูปแบบการออกแบบให้เรียนรู้เกี่ยวกับรูปแบบการต่อต้าน ฉันรู้ว่าคนเก่าที่ต่อต้านรูปแบบการออกแบบและฉันเห็นด้วยกับพวกเขาเพราะเมื่อคุณไม่มีประสบการณ์การเขียนโค้ดมากเกินไป แต่ทฤษฎีทฤษฎีรูปแบบการออกแบบมากมายคุณอาจท้ายที่สุดทำให้คุณและคุณ ทีม.

สุดท้ายอย่าคิดว่าคุณต้องปรับให้เหมาะสม / เปลี่ยนแปลงโซลูชันของคุณเพียงเพื่อให้สอดคล้องกับรูปแบบการออกแบบ ในทางตรงกันข้ามคุณสามารถโค้งงอลวดลายการออกแบบเพื่อให้พอดีกับโซลูชันของคุณ ไม่เป็นไรถ้าคุณไม่ได้ใช้ส่วนผสมทุกอย่างของสูตรการออกแบบตราบใดที่คุณมีทางออกที่ดีกว่าสำหรับปัญหาเฉพาะของคุณ คิดว่ารูปแบบการออกแบบเป็นข้อเสนอแนะและไม่ใช่เป็นกฎสำหรับโซลูชันของคุณ


1

ฉันพบวิธีการคิดวัตถุประสงค์ของ Net Object เกี่ยวกับ patters ว่ามีประโยชน์มากที่สุด คนที่อ่านหนังสือ GoF บ่อยครั้งก็เริ่มคิดว่าโครงสร้างที่พวกเขาแสดงในรูปแบบของการออกแบบและในรหัสเป็นรูปแบบและนี่คือลักษณะที่พวกเขามองเสมอ มันมีวิธีที่แตกต่างและดีกว่าในการมองดู

รูปแบบเป็นชุดของปัญหาที่คล้ายกันที่ทุกคนสามารถแก้ไขได้ด้วยสูตรนามธรรมบางอย่างไม่ใช่ชุดของสูตรที่สามารถใช้ในการแก้ปัญหาต่าง ๆ ได้ สิ่งนี้หมายความว่าลวดลายมีอยู่แล้วก่อนที่คุณจะเริ่มทำการออกแบบวัตถุจากนั้นนักออกแบบคือการค้นหาไม่ใช่เพื่อกำหนด

นอกจากนี้ผู้คนจำนวนมากดูที่รูปแบบและพูดว่า "โอ้ฉันเพิ่งแก้ไขได้โดย .... ฉันไม่ได้ใช้รูปแบบที่ไร้สาระ" สิ่งนี้คือ ".... " เกือบจะหลีกเลี่ยงไม่ได้ที่จะอธิบายการใช้ AN ของรูปแบบการแก้ปัญหาที่กำหนด ตัวอย่างเช่นพอยน์เตอร์ของฟังก์ชันอาร์เรย์สามารถทำหน้าที่เป็น Chain of Responsibility ถึงแม้ว่านี่จะไม่ใช่สูตรดั้งเดิม

เมื่อคำนึงถึงสิ่งนี้การมุ่งเน้นในการศึกษารูปแบบของคุณควรเป็นปัญหาไม่ใช่ในรูปแบบ เรียนรู้ปัจจัยกระตุ้นของรูปแบบและวิธีจัดการกับปัจจัยเหล่านั้น การทำเช่นนี้จะช่วยให้คุณเห็นรูปแบบของปัญหาแล้วชี้ให้เห็น สิ่งนี้รวมถึงภาษาที่รูปแบบให้เราพูดเกี่ยวกับการออกแบบช่วยให้คุณเปิดเผยการออกแบบที่เหมาะสมในการตอบปัญหาต่างๆที่คุณกำลังเผชิญอยู่

ในระยะสั้นรูปแบบการเรียนรู้ไม่เพียงคุ้มค่า ... คุณ จำกัด ตัวเองโดยไม่เรียนรู้ ฉันไม่ต้องการที่จะอธิบายหลักการจูงใจทั้งหมดและรูปแบบการแก้ปัญหาทั่วไปเมื่อฉันพูดว่า "ดูเหมือนผู้มาเยือนฉัน"

นี่คือเว็บไซต์ของพวกเขา: http://www.netobjectives.com/PatternRepository/index.php?title=Main_Page


แหล่งข้อมูลที่ยอดเยี่ยมลิงก์นั้นเป็นคำอธิบายที่กระชับเกี่ยวกับรูปแบบการออกแบบที่สำคัญส่วนใหญ่ มันไม่ได้เป็นเชิงลึกเป็นหนังสือไป แต่ก็เป็นข้อได้เปรียบ
jhocking

1

รูปแบบการออกแบบที่อธิบายโดย GoF นั้นเป็นส่วนขยายตามธรรมชาติของกระบวนทัศน์ OO หากคุณไม่เข้าใจอย่างถ่องแท้ถึงเป้าหมายของ OOP (การห่อหุ้มการแยกข้อกังวลหลักการ DRY ความเป็นแบบแยกส่วน ฯลฯ ) จากนั้นลองใช้รูปแบบการออกแบบได้อย่างประสบความสำเร็จ

อย่างไรก็ตามหากคุณทำให้เท้าของคุณเปียกใน OOP ในโลกแห่งความเป็นจริงและพยายามซื่อสัตย์กับค่า OOP คุณจะต้องตกอยู่ในสถานการณ์ที่อธิบายโดย GoF อย่างหลีกเลี่ยงไม่ได้และโอกาสที่คุณจะคิดค้นวิธีแก้ปัญหาคล้ายกับพวกเขา หลังจากแก้ไขปัญหาที่คล้ายกันมากมายคุณอาจเริ่มเห็นรูปแบบเกิดขึ้น ณ จุดนี้มันทำให้รู้สึกถึงการอ่านหนังสือ; คุณจะมีความรู้สึกเป็นที่ยอมรับและคุณจะประทับใจในความสง่างามและความสะอาดของลวดลายที่เสนอทันที โอกาสที่คุณจะพิจารณารูปแบบเหล่านี้บางอย่างไม่มีเกมง่ายๆ (ซึ่งเมื่อคุณรู้ว่าพวกเขามีหลายรูปแบบ) คุณจะสามารถตัดสินได้ดีว่ารูปแบบบางอย่างจะมีผลบังคับใช้ในสถานการณ์ที่กำหนดหรือไม่

และนี่คือคำเตือนอีกประการหนึ่ง: เพียงเพราะคุณรู้ว่ารูปแบบเหล่านี้ไม่ได้หมายความว่าคุณต้องใช้มันทุกที่ บางคนฉลาดและผู้คนถูกล่อลวงให้ใช้มันแม้ว่าพวกเขาจะไม่เหมาะสมอย่างน่ากลัวรูปแบบซิงเกิลเป็นตัวอย่างที่มีชื่อเสียงที่สุด ข้อ จำกัด เฉพาะของเนื้อหาเท่านั้น)


0

รูปแบบการออกแบบพยายามที่จะแก้ปัญหาของดีไซน์

  • พวกเขาถูกสร้างขึ้น AFAIK เป็นหลักสำหรับภาษา OOP
  • ปัญหาบางอย่างไม่มีอยู่ในการเขียนโปรแกรมเชิงฟังก์ชัน (รูปแบบคำสั่งคือวิธีการทำฟังก์ชั่นชั้นหนึ่งรูปแบบกลยุทธ์จะประมาณฟังก์ชั่นการสั่งซื้อที่สูงขึ้น ... ) รูปแบบเหล่านี้มีไว้สำหรับภาษา (OOP ส่วนใหญ่) ซึ่งไม่จำเป็นต้องมีฟังก์ชันการทำงาน
  • เรียงตามลำดับตัวอักษร หลายรูปแบบเป็นองค์ประกอบของคนอื่น ๆ หรือความคิดจะประกอบด้วยสิ่งที่เคยมีมาก่อน

ฉันเรียนรู้รูปแบบในภายหลังหลังจากฉันรู้ว่าการเขียนโปรแกรมใช้งานได้บางอย่าง UML การออกแบบฐานข้อมูลโครงสร้างข้อมูลและอัลกอริทึม ที่จริงฉันเพิ่งไปลองคิดดูรายการการออกแบบลวดลายเหล่านี้บน cheatsheetและพยักหน้าให้ฉันรู้แล้วว่าส่วนใหญ่ของพวกเขา บางคนดีจริง ๆ เช่นรูปแบบซิงเกิลหรือ "การสื่อสาร" (ผู้เยี่ยมชมคนกลาง) ...


รูปแบบการออกแบบไม่พยายามแก้ไขปัญหาการออกแบบอย่างชัดเจน GoF เองอธิบายว่ามันเป็นรูปแบบทั่วไปที่พบในการเขียนโปรแกรมในโลกแห่งความเป็นจริง เป้าหมายคือการอธิบายรูปแบบเหล่านี้เพื่อให้โปรแกรมเมอร์คนอื่นสามารถรับรู้สถานการณ์ที่คล้ายกันและหลีกเลี่ยงข้อผิดพลาดและข้อผิดพลาดที่พบบ่อยเช่นเดียวกับการตระหนักถึงวิธีการแก้ปัญหาทางเลือก
tdammers

0

ฉันเห็นด้วยกับคำตอบอื่น ๆ เกี่ยวกับวิธีการใช้รูปแบบการออกแบบที่มีประสบการณ์น้อย

ถึงกระนั้นฉันขอแนะนำให้อ่านอย่างน้อยตอนแรกของหนังสือ GoF ส่วนแรกจะแนะนำคุณเกี่ยวกับรูปแบบการออกแบบ แต่จริงๆแล้วเกี่ยวกับหลักการของการออกแบบ OO และสิ่งนี้ควรเป็นประโยชน์ในการอ่านและทำความเข้าใจแม้จะมีประสบการณ์ค่อนข้างน้อย (ความคิดหลักบางข้อที่ฉันจำได้คือ "ห่อหุ้มแนวคิดที่แตกต่างกัน", "ลำดับชั้นการสืบทอดควรกว้าง แต่ไม่ลึก") มันเกือบจะเป็นเรื่องน่าอายที่งานส่วนใหญ่รู้จักรูปแบบ 23 - การอภิปรายเกี่ยวกับหลักการออกแบบ OO การแจ้งให้ทราบว่ารูปแบบเหล่านั้นมีค่าอย่างยิ่งเช่นกัน


0

คำถามของฉันคือมันคุ้มค่าที่จะเรียนรู้รูปแบบในหนังสือ GoF หรือไม่?

แน่นอน! คุณควรเรียนรู้ไม่เพียง แต่รูปแบบการออกแบบซอฟต์แวร์ แต่เทคนิคการออกแบบโดยทั่วไป การเรียนรู้วิธีแก้ไขปัญหาร่วมกันสำหรับปัญหาทั่วไปเป็นการเริ่มต้นที่ยอดเยี่ยม โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มขุดเป็นรูปแบบและการแลกเปลี่ยนของพวกเขา

พวกเขาปรากฏตัวเพียงพอที่ฉันควรจะเรียนรู้พวกเขา?

หนังสือ Gang of Four ดั้งเดิมได้รับการพัฒนาโดยตรวจสอบโครงการซอฟต์แวร์จำนวนมากและดูเทคนิคที่นักพัฒนาซอฟต์แวร์จำนวนหนึ่งใช้ในการแก้ปัญหา ผู้เขียนพบว่ามีเทคนิคที่ดีจริง ๆ ไม่กี่อย่างรวมถึงจำนวนที่ถูกนำไปใช้ในโครงการที่แยกจากกันมาก

ดูเหมือนจะตอบโต้ได้ง่ายอยู่เสมอเพื่อลองและทำให้ปัญหาพอดีกับรูปแบบคลาสสิก

นี่เป็นปัญหาสำคัญ คุณไม่ได้ทำให้ปัญหาพอดีกับการแก้ปัญหา หนังสือรูปแบบการออกแบบ Gang of Four จะมีส่วน "ปัญหา" สำหรับแต่ละรูปแบบและแคตตาล็อกรูปแบบอื่นมีส่วนที่คล้ายกันซึ่งจะอธิบายเมื่อคุณควรใช้แต่ละรูปแบบ นอกจากนี้ยังอธิบายถึง "ผลที่ตามมา" ของการใช้รูปแบบ - หากคุณพยายามหลีกเลี่ยงผลที่ตามมาการใช้รูปแบบนั้นไม่ใช่ความคิดที่ดีที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.