ฉันจะให้ประสบการณ์การ Refactoring LedgerSMB แก่คุณ เราตัดสินใจที่จะทำสิ่งต่าง ๆ ในช่วงต้นและยังคงทำสิ่งที่คุณอธิบาย แต่ยังไม่มีวิธีการกาวจำนวนมาก (เรามีวิธีการติดกาวไม่กี่วิธีต่อไปนี้
ชีวิตกับรหัสสองฐาน
LedgerSMB รอดชีวิตมาได้กับสองรหัสฐานเป็นเวลาประมาณ 5 ปีและจะมีอีกหลายก่อนที่จะกำจัด codebase เก่า codebase เก่าเป็นหนังสยองขวัญที่แท้จริงที่เห็น การออกแบบ db ที่ไม่ถูกต้อง Perl สร้างเหมือนIS->some_func(\%$some_object);
พร้อมกับรหัสซึ่งแสดงให้เห็นว่าทำไมบางครั้งใช้สปาเก็ตตี้อุปมา codebase ใหม่หลีกเลี่ยงสิ่งนี้โดยการย้ายเคียวรี db ไปยังโพรซีเดอร์ที่เก็บไว้มีเฟรมเวิร์กที่สะอาดกว่าสำหรับการจัดการคำร้องขอและอื่น ๆ อีกมากมาย
สิ่งแรกที่เราตัดสินใจที่จะทำคือพยายาม refactor โมดูลโดยโมดูล ซึ่งหมายถึงการย้ายฟังก์ชันการทำงานทั้งหมดในพื้นที่เฉพาะไปยังโมดูลใหม่แล้วทำการเชื่อมโยงรหัสเก่าเข้ากับโมดูลใหม่ หาก API ใหม่สะอาดนี่ไม่ใช่เรื่องใหญ่ ถ้า API ใหม่ไม่ใช่เรื่องยุ่งเหยิงและนั่นเป็นคำเชิญให้ทำงานหนักขึ้นเล็กน้อยสำหรับ API ใหม่ ....
สิ่งที่สองคือมีหลายครั้งเมื่อรหัสใหม่มีการเข้าถึงตรรกะในรหัสเก่า นี่คือการหลีกเลี่ยงในขอบเขตที่เป็นไปได้เพราะมันนำไปสู่วิธีการกาวที่น่าเกลียด แต่ก็ไม่สามารถหลีกเลี่ยงได้เสมอ ในกรณีนี้ควรใช้วิธีกาวให้น้อยที่สุดและหลีกเลี่ยงให้มากที่สุดเท่าที่จะเป็นไปได้ แต่ใช้เมื่อจำเป็น
ในการทำให้งานนี้คุณต้องยอมรับในการเขียนฟังก์ชันใหม่ทั้งหมดในพื้นที่เฉพาะ ตัวอย่างเช่นหากคุณสามารถเขียนรหัสติดตามข้อมูลลูกค้าใหม่ทั้งหมดได้ในครั้งเดียวนั่นหมายความว่ารหัสที่เรียกรหัสนี้จากรหัสเก่านั้นไม่ยากที่จะใช้งานและส่งไปยังรหัสเก่าจากรหัสใหม่จะย่อเล็กสุด
สิ่งที่สองคือถ้าคุณมี abstractions ที่สมเหตุสมผลในสถานที่ของคุณคุณควรจะสามารถเลือกระดับของ API ที่จะโทรและวิธีรักษาความสะอาด อย่างไรก็ตามคุณควรคิดถึงการเขียนส่วนที่เรียก API ของคุณใหม่เพื่อให้มีความสะอาดมากขึ้นเช่นกัน
มีหลายพื้นที่ของเครื่องมือทางธุรกิจที่มีความซับซ้อนลดลงไม่ได้ คุณไม่สามารถกำจัดความซับซ้อนทั้งหมดได้ แต่คุณสามารถจัดการได้โดยมุ่งเน้นไปที่ clean API ที่ทำสิ่งที่คุณต้องทำโดยเฉพาะและโมดูลที่ใช้ API นั้นอย่างสร้างสรรค์ กาวควรเป็นทางเลือกสุดท้ายหลังจากพิจารณาว่าการเขียนรหัสที่เหลืออาจเร็วขึ้น