คำถามติดแท็ก design-patterns

รูปแบบการออกแบบเป็นโซลูชันที่ใช้ซ้ำได้ทั่วไปสำหรับปัญหาที่เกิดขึ้นทั่วไปในการออกแบบซอฟต์แวร์

4
มีกลยุทธ์การออกแบบเฉพาะที่สามารถนำไปใช้แก้ปัญหาไก่และไข่ส่วนใหญ่ในขณะที่ใช้วัตถุที่ไม่เปลี่ยนรูปแบบได้หรือไม่?
มาจากพื้นหลัง OOP (Java) ฉันกำลังเรียน Scala ด้วยตัวเอง ในขณะที่ฉันสามารถเห็นข้อดีของการใช้วัตถุที่ไม่เปลี่ยนรูปแบบรายบุคคล แต่ฉันมีเวลายากที่จะเห็นว่าใครสามารถออกแบบแอปพลิเคชันทั้งหมดเช่นนั้นได้ ฉันจะให้ตัวอย่าง: ว่าฉันมีวัตถุที่แสดงถึง "วัสดุ" และคุณสมบัติของพวกเขา (ฉันกำลังออกแบบเกมดังนั้นจริง ๆ แล้วฉันมีปัญหานั้น) เช่นน้ำและน้ำแข็ง ฉันจะมี "ผู้จัดการ" ที่เป็นเจ้าของอินสแตนซ์ของวัสดุดังกล่าวทั้งหมด หนึ่งคุณสมบัติจะเป็นจุดเยือกแข็งและจุดหลอมเหลวและสิ่งที่วัสดุค้างหรือละลาย [แก้ไข] ทุกกรณีวัสดุคือ "ซิงเกิลตัน" เช่นเดียวกับ Java Enum ฉันต้องการให้ "น้ำ" บอกว่าค้างเป็น "น้ำแข็ง" ที่ 0C และ "น้ำแข็ง" เพื่อบอกว่ามันละลายเป็น "น้ำ" ที่ 1C แต่ถ้าน้ำและน้ำแข็งไม่เปลี่ยนรูปพวกเขาไม่สามารถรับค่าอ้างอิงซึ่งกันและกันเป็นพารามิเตอร์ตัวสร้างได้เนื่องจากจะต้องสร้างอย่างใดอย่างหนึ่งก่อนและไม่สามารถรับการอ้างอิงถึงพารามิเตอร์อื่น ๆ ที่ยังไม่ได้มีอยู่เป็นพารามิเตอร์ตัวสร้างได้ ฉันสามารถแก้ปัญหานี้ได้โดยให้ทั้งคู่อ้างอิงถึงผู้จัดการเพื่อให้พวกเขาสามารถสอบถามเพื่อค้นหาอินสแตนซ์วัสดุอื่น ๆ ที่พวกเขาต้องการทุกครั้งที่พวกเขาถูกถามถึงคุณสมบัติการแช่แข็ง / การหลอมเหลวของพวกเขา แต่แล้วฉันก็พบปัญหาเดียวกันระหว่างผู้จัดการ และวัสดุที่พวกเขาต้องการการอ้างอิงถึงแต่ละอื่น ๆ แต่มันสามารถให้ไว้ในตัวสร้างสำหรับหนึ่งในพวกเขาดังนั้นผู้จัดการหรือวัสดุที่ไม่สามารถเปลี่ยนไม่ได้ …

8
“ คุณไม่ต้องการมัน” และ“ ตอนนี้ดีกว่าที่ไม่เคยเล่นมาด้วยกัน”
ฉันมักจะพบว่าตัวเองกอด "ตอนนี้ดีกว่าไม่เคย" เมื่อฉันก้าวเข้าสู่ความแห้งแล้งของการออกแบบ โดยปกติแล้วฉันพบว่าฉันจำเป็นต้องปลูกฝังความเข้าใจเกี่ยวกับตำแหน่งที่มีสิทธิ์เพียงแห่งเดียวสำหรับความรู้ในบริบทของระบบความรู้ชิ้นอื่น ๆ ดังนั้นฉันมักจะออกแบบระบบ 'ตอนนี้' ในทางกลับกันการฝึกฝนนี้ทำให้ฉันต้องสร้างล่วงหน้าค่อนข้างไกลถึงแม้จะมีโอกาสพอสมควรที่ฉันไม่ต้องการมัน รูปแบบทั้งสองนี้มีวิธีการอย่างไร คุณใช้วิธีปฏิบัติแบบใดเพื่อให้แน่ใจว่าพวกเขาเล่นได้ดี? คุณจะสอนพวกเขาด้วยกันโดยไม่สร้างความสับสนได้อย่างไร

6
คุณสร้าง GUI สำหรับคลาส polymorphic ได้อย่างไร
สมมติว่าฉันมีตัวสร้างการทดสอบเพื่อให้ครูสามารถสร้างคำถามมากมายสำหรับการทดสอบ อย่างไรก็ตามไม่ใช่คำถามทุกข้อที่เหมือนกัน: คุณมีตัวเลือกหลายตัวกล่องข้อความการจับคู่และอื่น ๆ คำถามแต่ละประเภทต้องเก็บข้อมูลประเภทต่าง ๆ และต้องการ GUI ที่แตกต่างกันสำหรับทั้งผู้สร้างและผู้ทดสอบ ฉันต้องการหลีกเลี่ยงสองสิ่ง: ตรวจสอบประเภทหรือการคัดเลือกนักแสดง สิ่งใดที่เกี่ยวข้องกับ GUI ในรหัสข้อมูลของฉัน ในความพยายามครั้งแรกของฉันฉันจบด้วยคลาสต่อไปนี้: class Test{ List<Question> questions; } interface Question { } class MultipleChoice implements Question {} class TextBox implements Question {} อย่างไรก็ตามเมื่อฉันไปแสดงการทดสอบฉันจะจบลงด้วยรหัสเช่น: for (Question question: questions){ if (question instanceof MultipleChoice){ display.add(new MultipleChoiceViewer()); } //etc } นี่เป็นปัญหาที่พบบ่อยมาก มีรูปแบบการออกแบบบางอย่างที่ทำให้ฉันมีคำถามแบบ …

6
เมื่อใดที่ enums ไม่มีกลิ่นรหัส
ภาวะที่กลืนไม่เข้าคายไม่ออก ฉันได้อ่านหนังสือฝึกหัดที่ดีที่สุดมากมายเกี่ยวกับการฝึกฝนเชิงวัตถุและหนังสือเกือบทุกเล่มที่ฉันอ่านมีส่วนที่พวกเขาบอกว่า enums เป็นกลิ่นรหัส ฉันคิดว่าพวกเขาพลาดส่วนที่พวกเขาอธิบายเมื่อ enums ถูกต้อง ดังนั้นฉันกำลังมองหาแนวทางและ / หรือกรณีการใช้งานที่ enums ไม่ได้กลิ่นรหัสและในความเป็นจริงโครงสร้างที่ถูกต้อง แหล่งที่มา: "คำเตือนตามกฎของหัวแม่มือ, enums เป็นรหัสที่มีกลิ่นและควรได้รับการ refactored เพื่อเรียน polymorphic [8]" Seemann, Mark, การฉีดพึ่งพาใน. Net, 2011, p. 342 [8] Martin Fowler et al., Refactoring: การปรับปรุงการออกแบบของรหัสที่มีอยู่ (นิวยอร์ก: Addison-Wesley, 1999), 82 บริบท สาเหตุของภาวะที่กลืนไม่เข้าคายไม่ออกของฉันคือการซื้อขาย API พวกเขาให้กระแสข้อมูล Tick โดยส่งผ่านวิธีนี้: void TickPrice(TickType tickType, double value) ที่ไหน …

4
Java - มันเป็นความคิดที่ดีที่จะมีคลาสแบบคงที่?
ฉันกำลังทำงานในโครงการเดี่ยวขนาดใหญ่ขึ้นและตอนนี้และฉันมีหลายชั้นเรียนซึ่งฉันไม่เห็นเหตุผลที่จะสร้างตัวอย่างของ ตัวอย่างเช่นคลาสลูกเต๋าของฉันตอนนี้เก็บข้อมูลทั้งหมดของมันแบบสแตติกและวิธีการทั้งหมดของมันก็คงที่เช่นกัน Dice.roll()ผมไม่จำเป็นต้องเริ่มต้นมันเพราะเมื่อฉันต้องการที่จะม้วนลูกเต๋าและได้รับค่าใหม่ฉันเพียงแค่การใช้งาน ฉันมีหลายคลาสที่คล้ายกันซึ่งมีฟังก์ชั่นหลักเพียงอย่างเดียวเช่นนี้และฉันกำลังจะเริ่มทำงานกับคลาส "คอนโทรลเลอร์" ที่จะรับผิดชอบกิจกรรมทั้งหมด (เช่นเมื่อผู้เล่นเคลื่อนตัวและสิ่งที่เกิดขึ้นในปัจจุบัน) เป็น) และฉันพบว่าฉันสามารถทำตามแนวคิดเดียวกันสำหรับชั้นเรียนนี้ได้ ฉันไม่เคยวางแผนที่จะสร้างวัตถุหลายรายการสำหรับคลาสที่เฉพาะเจาะจงเหล่านี้ดังนั้นจึงเป็นความคิดที่ดีหรือไม่ที่จะทำให้พวกมันคงที่? ฉันสงสัยว่าสิ่งนี้ถือเป็น "การปฏิบัติที่ไม่ดี" เมื่อพูดถึงจาวา จากสิ่งที่ฉันได้เห็นชุมชนดูเหมือนจะแยกในหัวข้อนี้? ต่อไปฉันจะรักการอภิปรายเกี่ยวกับเรื่องนี้และการเชื่อมโยงไปยังแหล่งข้อมูลจะดีเช่นกัน!

4
ไม่สามารถเข้าใจรูปแบบการออกแบบโปรแกรมมิง
ฉันทำงานกับ javascript ตลอด 4 ปีที่ผ่านมา ฉันมีความมั่นใจมากเกี่ยวกับทักษะการแก้ปัญหาของฉันและฉันเห็นได้ว่าคุณภาพรหัสของฉันดีขึ้น ฉันพยายามติดตามชุมชนและฉันกำลังทำงานกับ ES2015 และ React.js อย่างไรก็ตามฉันรู้สึกว่าฉันไม่สามารถเข้าใจรูปแบบการออกแบบโปรแกรมได้เลย ฉันรู้ว่าจะหาแหล่งข้อมูลเกี่ยวกับเรื่องนี้ได้ที่ไหนและฉันได้อ่านหนังสือเกี่ยวกับเรื่องนี้แล้ว ฉันพึ่งพาเพื่อนร่วมงานอาวุโสของฉันในการตัดสินใจเกี่ยวกับโครงสร้างโครงการ แต่ฉันไม่มีปัญหาในการทำงาน เมื่อใดก็ตามที่ฉันต้องการเริ่มต้นด้วยตัวเองฉันจะมองหาสองเส้นทางนี้: ถ้าฉันใช้ห้องสมุด / กรอบใหญ่อย่าง React.js ฉันมักจะคัดลอกสิ่งที่ชุมชนกำลังทำอยู่ ถ้าฉันทำอะไรที่เล็กลงฉันจะใช้รูปแบบโมดูล ฉันรู้ว่าเมื่อฉันได้รับความเข้าใจที่ดีขึ้นในเรื่องนี้ฉันจะสามารถตัดสินใจได้ดีขึ้น แต่ตอนนี้ฉันหลงทางไปแล้ว ฉันควรมองหาการศึกษาขั้นสูงในเรื่องนี้หรือไม่? ฉันต้องการที่ปรึกษาในเรื่องนี้หรือไม่? ฉันแค่โง่เหรอ? นี่มันยากที่จะเข้าใจใช่ไหม

1
ทำความเข้าใจกับรูปแบบของผู้มาเยี่ยม
ฉันมีลำดับชั้นของชั้นเรียนที่แสดงถึงการควบคุม GUI บางสิ่งเช่นนี้ Control->ContainerControl->Form ฉันต้องใช้ชุดของ algoritms ที่ทำงานกับวัตถุที่ทำสิ่งต่าง ๆ และฉันคิดว่ารูปแบบของผู้เข้าชมจะเป็นวิธีที่สะอาดที่สุด ลองยกตัวอย่างเช่นอัลกอริทึมที่สร้าง Xml Representaion ของลำดับชั้นของวัตถุ ใช้วิธี 'คลาสสิค' ฉันจะทำสิ่งนี้: public abstract class Control { public virtual XmlElement ToXML(XmlDocument document) { XmlElement xml = document.CreateElement(this.GetType().Name); // Create element, fill it with attributes declared with control return xml; } } public abstract class ContainerControl : …

2
ภาพรวมที่ดีที่สุดสำหรับกระบวนทัศน์ C ++ ที่ทันสมัย? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเคยเขียน C ++ อย่างกว้างขวางระหว่าง 8 และ 10 ปีที่แล้ว ฉันได้ย้ายไปยัง C # ด้วยเหตุผลมืออาชีพ อย่างไรก็ตามบางครั้งฉันเห็นข้อความชอบ "หากคุณยังคงติดตามการอ้างอิงตัวชี้ด้วยตนเองคุณกำลังทำผิด" หรือ "C ++ มีความปลอดภัยอย่างสมบูรณ์แบบตราบใดที่คุณใช้แนวคิดสมัยใหม่เช่น RAII และไม่ได้จัดสรรหน่วยความจำด้วยตนเองเช่นนักพัฒนา C ที่กู้คืน" ทั้งสองเป็นขั้นตอนมาตรฐานเมื่อสิบปีที่แล้ว ฉันได้เห็นว่า C ++ ได้รับการปรับปรุงอย่างมากในช่วงเวลาที่ผ่านมา; โดยเฉพาะอย่างยิ่ง C ++ 0x ดูเหมือนจะมีความสามารถใหม่ ๆ แหล่งข้อมูลที่ดีที่สุดสำหรับโปรแกรมเมอร์ "C / old C ++" …

14
ฉันจะอธิบายประโยชน์ของการสืบทอดได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา เมื่อพยายามอธิบายแนวคิดของการสืบทอดใน OOP ตัวอย่างทั่วไปมักเป็นตัวอย่างสัตว์เลี้ยงลูกด้วยนม IMHO นี่เป็นตัวอย่างที่ไม่ดีจริงๆเพราะมันจะทำให้มือใหม่ใช้แนวคิดนี้ในทางที่ผิด และยิ่งไปกว่านั้นมันไม่ใช่การออกแบบทั่วไปที่พวกเขาจะต้องเผชิญในงานออกแบบประจำวัน ดังนั้นสิ่งที่จะเป็นปัญหาที่ดีเรียบง่ายและเป็นรูปธรรมที่แก้ไขได้โดยใช้มรดก?

2
อะไรคือหลักปฏิบัติและรูปแบบการออกแบบที่ผู้ชาย. NET ทุกคนควรรู้ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ในช่วงเวลาสั้น ๆ ของฉันในฐานะโปรแกรมเมอร์มืออาชีพฉันได้เห็นแอปพลิเคชั่นมากมายที่เขียนขึ้นโดยโปรแกรมเมอร์ผู้ซึ่งการศึกษาทั้งหมดดูเหมือนจะได้อ่านบทแรก ๆ สองเล่มในหนังสือ. NET 2.0 เฮ็คเมื่อฉันเริ่มฉันเขียนแอพพลิเคชั่นเหล่านั้นส่วนใหญ่! รูปแบบการออกแบบที่ใหญ่ที่สุดคืออะไรสำคัญสำหรับการเขียนแอปพลิเคชัน AWESOME .NET โดยที่ยอดเยี่ยมฉันหมายถึงภายในด้วย!

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

10
GoF Design Patterns - อันไหนที่คุณใช้จริง? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันพยายามให้ความรู้แก่เพื่อนร่วมงานในด้านรูปแบบการออกแบบ รูปแบบดั้งเดิมของ Gang of Four บางอันมีความลับเล็กน้อยดังนั้นฉันจึงสงสัยว่ามีรูปแบบ "จำเป็น" ของกลุ่มย่อยที่โปรแกรมเมอร์ทุกคนควรรู้หรือไม่ เมื่อฉันดูรายการฉันคิดว่าฉันอาจใช้ โรงงานบทคัดย่อ วิธีการโรงงาน ซิงเกิล สะพาน หน้าตึก คำสั่ง อันไหนที่คุณใช้จริงในการปฏิบัติและสิ่งที่คุณใช้พวกเขาสำหรับ? ลิงก์สำหรับผู้ที่ต้องการรายการรูปแบบ

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

4
ควรทำการฉีดแบบพึ่งพาได้ใน ctor หรือต่อวิธี?
พิจารณา: public class CtorInjectionExample { public CtorInjectionExample(ISomeRepository SomeRepositoryIn, IOtherRepository OtherRepositoryIn) { this._someRepository = SomeRepositoryIn; this._otherRepository = OtherRepositoryIn; } public void SomeMethod() { //use this._someRepository } public void OtherMethod() { //use this._otherRepository } } ต่อต้าน: public class MethodInjectionExample { public MethodInjectionExample() { } public void SomeMethod(ISomeRepository SomeRepositoryIn) { //use SomeRepositoryIn } …

4
การจัดการพารามิเตอร์ในแอปพลิเคชัน OOP
ฉันกำลังเขียนแอปพลิเคชัน OOP ขนาดกลางใน C ++ เป็นวิธีฝึกหลักการ OOP ฉันมีหลายคลาสในโครงการของฉันและบางส่วนจำเป็นต้องเข้าถึงพารามิเตอร์การกำหนดค่าใช้งาน พารามิเตอร์เหล่านี้อ่านจากแหล่งต่าง ๆ ในระหว่างการเริ่มต้นแอปพลิเคชัน บางไฟล์ถูกอ่านจากไฟล์ปรับแต่งในผู้ใช้ที่บ้านบางคนเป็นอาร์กิวเมนต์บรรทัดคำสั่ง (argv) ConfigBlockดังนั้นผมจึงสร้างชั้นเรียน คลาสนี้อ่านแหล่งพารามิเตอร์ทั้งหมดและเก็บไว้ในโครงสร้างข้อมูลที่เหมาะสม ตัวอย่างคือชื่อพา ธ และชื่อไฟล์ที่ผู้ใช้สามารถเปลี่ยนได้ในไฟล์กำหนดค่าหรือ - --verbose CLI flag จากนั้นหนึ่งสามารถโทรConfigBlock.GetVerboseLevel()เพื่ออ่านพารามิเตอร์เฉพาะนี้ คำถามของฉัน: เป็นการดีหรือไม่ที่จะรวบรวมข้อมูลการกำหนดค่ารันไทม์ทั้งหมดในชั้นเดียว? จากนั้นชั้นเรียนของฉันต้องการเข้าถึงพารามิเตอร์เหล่านี้ทั้งหมด ฉันสามารถคิดหลายวิธีในการบรรลุเป้าหมายนี้ แต่ฉันไม่แน่ใจว่าควรใช้วิธีใด คอนสตรัคเตอร์ของคลาสสามารถอ้างอิงถึง ConfigBlock ของฉันได้ public: MyGreatClass(ConfigBlock &config); หรือพวกเขาเพียงแค่รวมส่วนหัว "CodingBlock.h" ซึ่งมีคำจำกัดความของ CodingBlock ของฉัน: extern CodingBlock MyCodingBlock; จากนั้นไฟล์คลาส. cpp เท่านั้นที่ต้องรวมและใช้สิ่งที่ ConfigBlock ไฟล์. h ไม่แนะนำอินเทอร์เฟซนี้กับผู้ใช้ของคลาส อย่างไรก็ตามอินเทอร์เฟซสำหรับ …

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