ขณะนี้ฉันกำลังทำงานบางอย่างให้กับบริษัทที่รันเว็บแอปรุ่นเก่าที่สร้างบน Java Servlets (ระบบมีมาก่อน JSP แม้ว่าตอนนี้พวกเขาจะใช้มันเมื่อสร้างเพจใหม่) ฐานโค้ดเป็นเรื่องที่สับสนวุ่นวายมาก เนื่องจากใช้เวลาประมาณ 10 ปีในการสร้างบนเฟรมเวิร์กที่ล้าสมัย พวกเขามีความสอดคล้องกันน้อยมากในฐานโค้ด (แอปได้รับการพัฒนาโดยผู้คนมากมายในช่วงหลายปีที่ผ่านมา ซึ่งส่วนใหญ่ไม่ทำงานที่นี่อีกต่อไป) ไม่มีแนวคิดของ DRY (โดยพื้นฐานแล้วทุกหน้าถูกสร้างขึ้นตั้งแต่ต้น) มีเนื้อหาที่อ่านไม่ได้ / เป็นความลับจำนวนมาก รหัสและโดยทั่วไปแล้วโครงสร้างพื้นฐานที่ไม่สอดคล้องกันมาก
ขณะที่ฉันทำงานที่นี่ ฉันได้เพิ่มฟีเจอร์ที่ทันสมัย/พยายามล้างฐานโค้ดเล็กน้อย ฉันเพิ่ม jQuery บางส่วนในส่วนที่ฉันถูกเปิดเผย เพิ่มความปลอดภัยเล็กน้อยด้วยการตรวจสอบอินพุต ทำความสะอาดโมดูลบางส่วนเพื่อใช้หลักการ JavaScript ที่ไม่สร้างความรำคาญ ฯลฯ งานของฉันที่นี่เป็นโมดูลใหม่ ดังนั้นฉันจึงไม่ได้สัมผัสกับโมดูลเก่า ๆ มากนัก ตรรกะ. ฉันได้พยายามที่จะแนะนำแนวทางปฏิบัติที่ดีที่สุดให้กับงานทั้งหมดของฉันภายใต้โครงสร้างพื้นฐานปัจจุบันของพวกเขา แต่ฉันถูกบังคับให้เรียกใช้โค้ดเก่าๆ มากมายเพื่อทำให้งานของฉันสอดคล้องกัน
พวกเขามาถึงจุดที่พวกเขากำลังพิจารณาการอัปเดตระบบครั้งใหญ่ พวกเขาต้องการปรับปรุงการบำรุงรักษาฐานโค้ดและพยายามย้ายไปยังแอปพลิเคชันประเภทเฟรมเวิร์ก / MVC ที่ทันสมัยบางประเภท ระบบส่วนใหญ่มีมาก่อน XHTML ด้วยมาร์กอัปโวหารแบบอินไลน์ การเรียก javascript:function() ไม่มีการทดสอบหน่วย ก่อนวันที่ Hibernate ฯลฯ มีการผสมผสานระหว่างการสร้าง out.println html และการเรียก jsp จากภายใน Servlet
แอพบางตัวที่พวกเขาดู ได้แก่ Wicket, Struts, Tapestry และอาจเป็น Grails ปัญหาคือ การย้ายไปยังสิ่งเหล่านี้อาจต้องมีการเขียนระบบใหม่จำนวนมากซึ่งมีการใช้งานอยู่แล้ว และพวกเขาไม่สามารถเริ่มต้นใหม่ได้
คำถามของฉันคือ: อะไรจะเป็นวิธีที่ดีที่สุดในการโยกย้ายฐานรหัสเดิมเช่นนี้ไปยังกรอบงานที่ทันสมัยยิ่งขึ้นในขณะที่ยังคงรักษาตรรกะทางธุรกิจที่มีอยู่ (ไม่มีเหตุผลในการเขียนใหม่ที่ได้รับการทดสอบและใช้งานได้)
แนวคิดบางส่วนที่กำลังคิดอยู่ ได้แก่:
เขียนระบบเทมเพลตภายในที่จะทำงานร่วมกับโครงสร้างพื้นฐานปัจจุบัน (สร้างเพจในลักษณะที่สอดคล้องกัน)
รหัสพอร์ตไปยังกรอบงานเช่นพรม (นำรหัสเก่ามาใช้ซ้ำจำนวนมาก)
เขียนระบบใหม่ตั้งแต่ต้นโดยใช้เฟรมเวิร์กที่ทันสมัย แต่คัดลอกลอจิกจากระบบเก่า (ถ้าเป็นไปได้)
รักษาระบบเก่าไว้เหมือนเดิม และเพียงอัปเดตส่วนหน้าเพื่อให้ดูทันสมัยยิ่งขึ้น (อาจให้เวลา/เงิน ดีที่สุด)
วิธีที่ดีที่สุดในการอัปเดตโค้ด Java Servlet ดั้งเดิมให้เป็นเฟรมเวิร์กที่ทันสมัย (โดยใช้แนวทางปฏิบัติสมัยใหม่เพื่อการบำรุงรักษาง่าย การทดสอบหน่วย DRY) ในขณะที่ยังคงรักษาตรรกะไว้เหมือนเดิม
ยินดีต้อนรับข้อมูลเชิงลึก