วิธีการสร้างโครงสร้างใหม่ขนาดใหญ่หากบล็อกอื่นในตัวควบคุมด้านหน้าเซิร์ฟเล็ต Java [ซ้ำกัน]

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

สิ่งที่ฉันคิดได้คือใช้แฮชเทเบิลที่แมปเส้นทาง (จาก URL คำขอ) ไปยังวิธีการช่วยเหลือที่กำหนด JSP ที่เหมาะสม (และตั้งค่าแอตทริบิวต์)

ฉันชอบรูปลักษณ์ของ Spring Framework; อย่างไรก็ตาม ขณะนี้ฉันไม่สามารถพอร์ตไปยังเฟรมเวิร์กได้ บางอย่างเช่น Spring จะหลีกเลี่ยงปัญหาที่ฉันกำลังเผชิญอยู่ได้อย่างไร


person Ashley Talbert    schedule 11.09.2013    source แหล่งที่มา
comment
ดู: stackoverflow.com/questions/2060128/java-front-controller   -  person Punit Patel    schedule 11.09.2013


คำตอบ (2)


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

https://en.wikipedia.org/wiki/Command_pattern

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

ด้วยสถาปัตยกรรมนี้ คุณจะมีความยืดหยุ่นอย่างมากและง่ายต่อการนำไปใช้ :)

person Rafa    schedule 11.09.2013
comment
จะทำสิ่งนี้สำหรับโครงการของโรงเรียน.....ขอบคุณ....ครูให้เราทำ Nested Ifs และอย่างอื่น....โครงการสุดท้ายที่เขาให้อิสระแก่เราในการทำสิ่งที่เราต้องการ..... - person Grim; 06.12.2016

ใช้ แทนที่ Conditional ด้วย Command "รูปแบบ" การปรับโครงสร้างใหม่ ที่อธิบายไว้ในการปรับโครงสร้างใหม่เป็นรูปแบบ

แทน

if(conditionA){
  //...
}else if(conditionB){
  //...
}
 ...

Do :

Handler handler = LookupHandlerBy(condition);
handler.execute();
person dkatzel    schedule 11.09.2013