ฉันกำลังทำงานในโครงการที่ประมวลผลคำขอและมีสององค์ประกอบในการร้องขอคือคำสั่งและพารามิเตอร์ ตัวจัดการสำหรับแต่ละคำสั่งนั้นง่ายมาก (<10 บรรทัดมัก <5) มีคำสั่งอย่างน้อย 20 คำและน่าจะมีมากกว่า 50 คำสั่ง
ฉันคิดวิธีแก้ปัญหาสองสามข้อ:
- สวิตช์ใหญ่ / if-else หนึ่งคำสั่ง
- แผนที่ของคำสั่งไปยังฟังก์ชั่น
- แผนที่ของคำสั่งไปยังคลาสที่คงที่ / singletons
แต่ละคำสั่งทำการตรวจสอบข้อผิดพลาดเล็กน้อยและบิตเดียวที่สามารถแยกออกได้คือการตรวจสอบจำนวนพารามิเตอร์ที่กำหนดไว้สำหรับแต่ละคำสั่ง
อะไรจะเป็นทางออกที่ดีที่สุดสำหรับปัญหานี้และเพราะอะไร ฉันยังเปิดรับรูปแบบการออกแบบใด ๆ ที่ฉันอาจพลาดไป
ฉันคิดรายการ pro / con ต่อไปนี้สำหรับแต่ละรายการ:
สวิตซ์
- ข้อดี
- เก็บคำสั่งทั้งหมดไว้ในฟังก์ชันเดียว เนื่องจากมันเรียบง่ายนี่ทำให้เป็นตารางการค้นหาด้วยภาพ
- ไม่ต้องวุ่นวายกับแหล่งข้อมูลด้วยฟังก์ชั่นขนาดเล็กจำนวนมาก / คลาสที่สามารถใช้งานได้ในที่เดียว
- ข้อเสีย
- นานมาก
- ยากที่จะเพิ่มคำสั่งโดยทางโปรแกรม (จำเป็นต้องโยงใช้ตัวพิมพ์เล็ก)
คำสั่งแผนที่ -> ฟังก์ชั่น
- ข้อดี
- ชิ้นเล็กขนาดกัด
- สามารถเพิ่ม / ลบคำสั่งโดยทางโปรแกรม
- ข้อเสีย
- หากทำแบบอินไลน์เหมือนกับสวิตช์
- ถ้าไม่ทำในบรรทัดฟังก์ชั่นมากมายใช้ในที่เดียวเท่านั้น
คำสั่งแผนที่ -> คลาสคงที่ / ซิงเกิล
- ข้อดี
- สามารถใช้ polymorphism เพื่อจัดการกับการตรวจสอบข้อผิดพลาดอย่างง่าย ๆ (เช่น 3 บรรทัดเท่านั้น แต่ยังคงอยู่)
- ประโยชน์ที่คล้ายคลึงกับแผนที่ -> ฟังก์ชั่นการแก้ปัญหา
- ข้อเสีย
- คลาสที่เล็กมากจำนวนมากจะทำให้โครงงานยุ่งเหยิง
- การติดตั้งไม่ได้อยู่ในที่เดียวกันดังนั้นจึงไม่ง่ายที่จะสแกนการใช้งาน
หมายเหตุเพิ่มเติม:
ฉันกำลังเขียนสิ่งนี้ใน Go แต่ฉันไม่คิดว่าโซลูชันนี้เป็นภาษาเฉพาะ ฉันกำลังมองหาวิธีแก้ปัญหาทั่วไปมากกว่าเพราะฉันอาจต้องทำสิ่งที่คล้ายกันมากในภาษาอื่น
คำสั่งคือสตริง แต่ฉันสามารถแมปนี้กับตัวเลขได้อย่างง่ายดายถ้าสะดวก ลายเซ็นฟังก์ชั่นเป็นสิ่งที่ชอบ:
Reply Command(List<String> params)
Go มีฟังก์ชั่นระดับบนสุดและแพลตฟอร์มอื่น ๆ ที่ฉันกำลังพิจารณาก็มีฟังก์ชั่นระดับสูงสุดด้วยดังนั้นความแตกต่างระหว่างตัวเลือกที่สองและตัวที่สาม