คำแนะนำสำหรับการย้ายเว็บแอปรุ่นเก่าไปยังเฟรมเวิร์กสมัยใหม่

ขณะนี้ฉันกำลังทำงานบางอย่างให้กับบริษัทที่รันเว็บแอปรุ่นเก่าที่สร้างบน Java Servlets (ระบบมีมาก่อน JSP แม้ว่าตอนนี้พวกเขาจะใช้มันเมื่อสร้างเพจใหม่) ฐานโค้ดเป็นเรื่องที่สับสนวุ่นวายมาก เนื่องจากใช้เวลาประมาณ 10 ปีในการสร้างบนเฟรมเวิร์กที่ล้าสมัย พวกเขามีความสอดคล้องกันน้อยมากในฐานโค้ด (แอปได้รับการพัฒนาโดยผู้คนมากมายในช่วงหลายปีที่ผ่านมา ซึ่งส่วนใหญ่ไม่ทำงานที่นี่อีกต่อไป) ไม่มีแนวคิดของ DRY (โดยพื้นฐานแล้วทุกหน้าถูกสร้างขึ้นตั้งแต่ต้น) มีเนื้อหาที่อ่านไม่ได้ / เป็นความลับจำนวนมาก รหัสและโดยทั่วไปแล้วโครงสร้างพื้นฐานที่ไม่สอดคล้องกันมาก

ขณะที่ฉันทำงานที่นี่ ฉันได้เพิ่มฟีเจอร์ที่ทันสมัย/พยายามล้างฐานโค้ดเล็กน้อย ฉันเพิ่ม jQuery บางส่วนในส่วนที่ฉันถูกเปิดเผย เพิ่มความปลอดภัยเล็กน้อยด้วยการตรวจสอบอินพุต ทำความสะอาดโมดูลบางส่วนเพื่อใช้หลักการ JavaScript ที่ไม่สร้างความรำคาญ ฯลฯ งานของฉันที่นี่เป็นโมดูลใหม่ ดังนั้นฉันจึงไม่ได้สัมผัสกับโมดูลเก่า ๆ มากนัก ตรรกะ. ฉันได้พยายามที่จะแนะนำแนวทางปฏิบัติที่ดีที่สุดให้กับงานทั้งหมดของฉันภายใต้โครงสร้างพื้นฐานปัจจุบันของพวกเขา แต่ฉันถูกบังคับให้เรียกใช้โค้ดเก่าๆ มากมายเพื่อทำให้งานของฉันสอดคล้องกัน

พวกเขามาถึงจุดที่พวกเขากำลังพิจารณาการอัปเดตระบบครั้งใหญ่ พวกเขาต้องการปรับปรุงการบำรุงรักษาฐานโค้ดและพยายามย้ายไปยังแอปพลิเคชันประเภทเฟรมเวิร์ก / MVC ที่ทันสมัยบางประเภท ระบบส่วนใหญ่มีมาก่อน XHTML ด้วยมาร์กอัปโวหารแบบอินไลน์ การเรียก javascript:function() ไม่มีการทดสอบหน่วย ก่อนวันที่ Hibernate ฯลฯ มีการผสมผสานระหว่างการสร้าง out.println html และการเรียก jsp จากภายใน Servlet

แอพบางตัวที่พวกเขาดู ได้แก่ Wicket, Struts, Tapestry และอาจเป็น Grails ปัญหาคือ การย้ายไปยังสิ่งเหล่านี้อาจต้องมีการเขียนระบบใหม่จำนวนมากซึ่งมีการใช้งานอยู่แล้ว และพวกเขาไม่สามารถเริ่มต้นใหม่ได้

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

แนวคิดบางส่วนที่กำลังคิดอยู่ ได้แก่:

  • เขียนระบบเทมเพลตภายในที่จะทำงานร่วมกับโครงสร้างพื้นฐานปัจจุบัน (สร้างเพจในลักษณะที่สอดคล้องกัน)

  • รหัสพอร์ตไปยังกรอบงานเช่นพรม (นำรหัสเก่ามาใช้ซ้ำจำนวนมาก)

  • เขียนระบบใหม่ตั้งแต่ต้นโดยใช้เฟรมเวิร์กที่ทันสมัย ​​แต่คัดลอกลอจิกจากระบบเก่า (ถ้าเป็นไปได้)

  • รักษาระบบเก่าไว้เหมือนเดิม และเพียงอัปเดตส่วนหน้าเพื่อให้ดูทันสมัยยิ่งขึ้น (อาจให้เวลา/เงิน ดีที่สุด)

วิธีที่ดีที่สุดในการอัปเดตโค้ด Java Servlet ดั้งเดิมให้เป็นเฟรมเวิร์กที่ทันสมัย ​​(โดยใช้แนวทางปฏิบัติสมัยใหม่เพื่อการบำรุงรักษาง่าย การทดสอบหน่วย DRY) ในขณะที่ยังคงรักษาตรรกะไว้เหมือนเดิม

ยินดีต้อนรับข้อมูลเชิงลึก


person kgrad    schedule 20.02.2009    source แหล่งที่มา


คำตอบ (5)


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

คำว่า "รีแฟคเตอร์" ฉันหมายถึง - แนะนำการทดสอบในตำแหน่งเชิงกลยุทธ์ หน่วยและฟังก์ชัน และทำงานอย่างบ้าคลั่งเพื่อลดความซ้ำซ้อน โดยอาศัยการทดสอบเหล่านี้

person Morendil    schedule 20.02.2009

ฉันถามคำถามที่คล้ายกันมากเมื่อไม่กี่เดือนที่ผ่านมา คำตอบบางข้ออาจเป็นประโยชน์สำหรับคุณ:

อะไรคือสิ่งที่ดีที่สุด วิธีโยกย้ายเว็บแอปที่ยุ่งเหยิงที่มีอยู่ไปยัง MVC ที่หรูหรา

person matt b    schedule 20.02.2009

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

ตัวอย่างเช่น Code Complete (Steve McConnell), ch. 24 การปรับโครงสร้างใหม่

  • บันทึกรหัสที่คุณเริ่มต้นด้วย

  • ปรับโครงสร้างใหม่ให้มีขนาดเล็กอยู่เสมอ

  • ทำการปรับโครงสร้างใหม่ครั้งละหนึ่งรายการ

  • ปรับโครงสร้างใหม่เมื่อคุณเพิ่มรูทีน คลาส แก้ไขข้อบกพร่อง

  • กำหนดอินเทอร์เฟซระหว่างโค้ดที่สะอาดและน่าเกลียด

  • ...

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

person eljenso    schedule 20.02.2009

วิธีที่ดีที่สุด: ใช้แอปที่มีอยู่เป็นข้อกำหนดการทำงานและสร้างแอปใหม่ตั้งแต่ต้น (โดยมีการใช้ซ้ำแบบ cut-n-paste หรือการใช้คลาสจริงซ้ำตามความเหมาะสม)

จากประสบการณ์ของผม การพยายามเพิ่มแอปรุ่นเก่าที่เขียนไม่ดีลงในเฟรมเวิร์กใหม่ หรือการพยายาม "รวม" โค้ดขยะด้วยโค้ดที่ดี ส่งผลให้เกิดบางสิ่งที่ยากและมีราคาแพงกว่าในการดูแลรักษาในระยะยาว

person Eric Petroelje    schedule 20.02.2009

นี่เป็นเพียงความคิดเห็นของฉัน เพราะฉันคิดว่าคำถามนี้คือสิ่งที่ผู้คนจ่ายเงินให้ที่ปรึกษาราคาแพงเพื่อทำงาน (และมักจะลงเอยด้วยการเสียเงิน! ดูตัวอย่างที่ thedailywtf.com)

ฉันคิดว่ามันไม่คุ้มกับการเขียนใหม่ทั้งหมด เพราะในระหว่างขั้นตอนการเขียนใหม่ คุณอาจต้องรักษาแอปดั้งเดิมไว้* ดังนั้นการเขียนใหม่จะมีเป้าหมายที่เคลื่อนไหว วิธีที่ดีกว่าคือการชำระหนี้โค้ดในขณะที่คุณรีแฟคเตอร์ - กล่าวคือ ต้องใช้ความพยายาม 2x, 3x หรือ 10x ในการใช้ฟีเจอร์ง่ายๆ เพียงเพราะการทำในลักษณะที่ดีเกี่ยวข้องกับการรีแฟคเตอร์ฮีป แต่ต้องใช้ความพยายามนี้ เนื่องจากหนี้ในแอปนี้มีสูง และสุดท้ายก็ต้องชำระด้วยวิธีใดวิธีหนึ่ง

มันอาจจะเจ็บแต่ยาดีๆกลับเจ็บ

  • หากคุณมีเวลาเหลือเฟือในการเขียนใหม่ เช่น แอปดั้งเดิมถูกหยุดทำงานและไม่ได้รับการดูแล (ไม่มีแม้แต่การแก้ไขข้อบกพร่อง) ก็อาจทำงานเป็นการเขียนใหม่ทั้งหมดลงในเฟรมเวิร์กใดก็ตามที่คุณเห็นว่าเหมาะสม แต่ฉันสงสัยอย่างมากว่านี่จะเป็นกรณีนี้ในสถาบันใด ๆ
person Chii    schedule 21.02.2009