อาจจะเหมือนหลาย ๆ คนฉันมักพบว่าตัวเองปวดหัวกับปัญหาการออกแบบซึ่งตัวอย่างเช่นมีรูปแบบการออกแบบ / วิธีการบางอย่างที่ดูเหมือนจะเหมาะกับปัญหาและมีประโยชน์ตามที่ต้องการ บ่อยครั้งที่มีข้อแม้บางอย่างซึ่งทำให้เป็นการยากที่จะใช้รูปแบบ / วิธีการโดยไม่ต้องทำงานใด ๆ ซึ่งจะส่งผลเสียต่อรูปแบบ / วิธีการ ฉันสามารถจบการวนซ้ำได้ง่ายในหลายรูปแบบ / วิธีการเพราะสามารถคาดเดาได้ว่าเกือบทั้งหมดมีข้อแม้ที่สำคัญมากในสถานการณ์จริงซึ่งไม่มีวิธีแก้ปัญหาที่ง่าย
ตัวอย่าง:
ฉันจะให้คุณตัวอย่างตามสมมุติบนพื้นฐานของจริงฉันเพิ่งพบ สมมติว่าฉันต้องการใช้การเรียงซ้อนมากกว่าการสืบทอดเนื่องจากลำดับชั้นการสืบทอดได้ขัดขวางความสามารถในการปรับขนาดของรหัสในอดีต ฉันอาจ refactor รหัส แต่แล้วพบว่ามีบริบทบางอย่างที่ superclass / baseclass เพียงต้องการเรียกฟังก์ชันการทำงานใน subclass แม้จะพยายามหลีกเลี่ยง
วิธีที่ดีที่สุดถัดไปดูเหมือนว่าจะใช้รูปแบบผู้แทน / ผู้สังเกตการณ์ครึ่งและรูปแบบองค์ประกอบครึ่งเพื่อให้ซูเปอร์คลาสสามารถมอบหมายพฤติกรรมหรือเพื่อให้คลาสย่อยสามารถสังเกตเห็นเหตุการณ์ซูเปอร์คลาส จากนั้นชั้นเรียนจะสามารถปรับขนาดได้และบำรุงรักษาน้อยลงเพราะมันไม่ชัดเจนว่าควรจะขยายเวลาออกไปอย่างไรนอกจากนี้ยังเป็นการยากที่จะขยายผู้ฟัง / ผู้เข้าร่วมประชุมที่มีอยู่ ข้อมูลก็ไม่ได้ถูกซ่อนไว้อย่างดีเพราะใคร ๆ ก็เริ่มต้องการทราบถึงการนำไปปฏิบัติเพื่อดูวิธีการขยายซูเปอร์คลาส (เว้นแต่คุณจะใช้ความคิดเห็นอย่างกว้างขวาง)
ดังนั้นหลังจากนี้ฉันอาจเลือกที่จะเพียงแค่ใช้ผู้สังเกตการณ์หรือผู้ได้รับมอบหมายอย่างสมบูรณ์เพื่อหลีกเลี่ยงข้อเสียที่มาพร้อมกับการผสมผสานวิธีการต่างๆ อย่างไรก็ตามสิ่งนี้มาพร้อมกับปัญหาของตัวเอง ตัวอย่างเช่นฉันอาจพบว่าฉันต้องมีผู้สังเกตการณ์หรือผู้รับมอบสิทธิ์เพื่อเพิ่มจำนวนพฤติกรรมจนกระทั่งฉันต้องมีผู้สังเกตการณ์ / ผู้ได้รับมอบหมายสำหรับพฤติกรรมทุกอย่าง ทางเลือกหนึ่งอาจจะมีเพียงผู้ฟัง / ผู้รับมอบสิทธิ์ที่ใหญ่สำหรับพฤติกรรมทั้งหมด แต่จากนั้นคลาสที่ใช้งานจะจบลงด้วยวิธีการที่ว่างเปล่ามากมายเป็นต้น
จากนั้นฉันอาจลองวิธีอื่น แต่ก็มีปัญหามากมายเช่นกัน จากนั้นคนต่อไปและอีกคนหนึ่งหลังจาก ฯลฯ
กระบวนการซ้ำนี้ได้รับยากมากเมื่อแต่ละวิธีดูเหมือนว่าจะมีปัญหามากที่สุดเท่าที่ใด ๆ ของผู้อื่นและนำไปสู่การจัดเรียงของการออกแบบการตัดสินใจอัมพาต นอกจากนี้ยังเป็นการยากที่จะยอมรับว่าโค้ดจะจบลงด้วยปัญหาอย่างเท่าเทียมกันไม่ว่าจะใช้รูปแบบการออกแบบหรือวิธีการใด ถ้าฉันจบลงในสถานการณ์เช่นนี้หมายความว่าปัญหาจะต้องมีการคิดใหม่? คนอื่นทำอะไรเมื่อพวกเขาประสบกับสถานการณ์นี้
แก้ไข: ดูเหมือนจะมีการตีความจำนวนหนึ่งของคำถามที่ฉันต้องการล้าง:
- ฉันได้นำ OOP ออกจากคำถามอย่างสมบูรณ์เพราะปรากฏว่ามันไม่เฉพาะเจาะจงกับ OOP จริง ๆ แล้วมันง่ายเกินไปที่จะตีความความคิดเห็นบางส่วนที่ฉันทำเมื่อผ่านเกี่ยวกับ OOP
- บางคนอ้างว่าฉันควรทำซ้ำและลองใช้รูปแบบที่แตกต่างกันหรือว่าฉันควรจะทิ้งรูปแบบเมื่อมันหยุดทำงาน นี่เป็นกระบวนการที่ฉันตั้งใจจะอ้างถึงในตอนแรก ฉันคิดว่านี่ชัดเจนจากตัวอย่าง แต่ฉันสามารถทำให้ชัดเจนขึ้นดังนั้นฉันจึงแก้ไขคำถามให้ทำ