ฉันคิดว่านี่เป็นคำถามสองข้อในหนึ่งเดียว - ฉันจะลองตอบทั้งคู่
1) เราจะลดรหัสที่ซ้ำกันใน codebase ได้อย่างไร
มันจะช่วยเตือนตัวเราเองถึงประโยชน์ของการทำสิ่งนี้: มันส่งผลให้เกิดข้อผิดพลาดน้อยลงเนื่องจากตรรกะทางธุรกิจที่ซ้ำกันและต้องรักษารหัสให้น้อยลง วิธีที่ดีที่สุดในการลดปัญหานี้คือการสื่อสาร - ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ ฉันเห็นด้วยอย่างยิ่งกับคำแนะนำในการใช้การตรวจสอบโค้ดกับคำเตือนพิเศษที่คุณควรแบ่งปันความรับผิดชอบในการตรวจสอบรหัสอย่างเท่าเทียมกันเพื่อเผยแพร่ความรู้อย่างถูกต้อง คุณควรใช้สแตนอัพรายวันเพื่อให้นักพัฒนามักจะจำได้เมื่อมีคนพยายามแก้ปัญหาที่มีรหัสที่มีประโยชน์อยู่ คุณควรพิจารณาการจับคู่รหัสเพื่อเพิ่มการแบ่งปันความรู้และช่วยให้โปรแกรมเมอร์มีระเบียบวินัย
ฉันขอแนะนำให้นักพัฒนาของคุณใกล้กันมากที่สุดโดยควรอยู่ในห้องเดียวกัน มีกระดานไวท์บอร์ดและพื้นที่แชร์มากมาย จากนั้นส่งอาหารไปด้วยกัน ยิ่งนักพัฒนาของคุณ "ผูกพัน" มากเท่าไหร่พวกเขาก็จะสื่อสารซึ่งกันและกันได้ดีขึ้น
ฉันไม่เห็นด้วยกับคำแนะนำในการใช้วิกิหรือคล้ายกับรหัสเอกสาร ไม่ว่านักพัฒนาที่มีวินัยจะพยายามทำอะไรเอกสารจะลอยไปจากรหัสต้นฉบับ แนวทางที่มีประสิทธิภาพมากขึ้นคือการใช้สเปคโดยการทดสอบรูปแบบตัวอย่าง เอกสารเหล่านี้มีรหัสในลักษณะที่ทำให้ชัดเจนว่าควรใช้อย่างไรและการทดสอบของคุณจะล้มเหลวหากมีคนเปลี่ยนรหัสโดยไม่เปลี่ยนตัวอย่าง
คุณมีรหัสฐานข้อมูลขนาดใหญ่ที่มีรหัสซ้ำจำนวนมากอยู่แล้วดังนั้นคุณควรดำเนินการปรับโครงสร้างนี้ใหม่ อาจเป็นการยากที่จะค้นหารหัสที่ซ้ำกันซึ่งไม่ได้ถูกตัดและวาง ดังนั้นแทนที่จะทำเช่นนั้นฉันขอแนะนำให้คุณวิเคราะห์ประวัติการเปลี่ยนแปลงของคุณ ค้นหาไฟล์ที่มักจะมีการเปลี่ยนแปลงในเวลาเดียวกัน นี่อาจจะบ่งบอกถึงปัญหาของการห่อหุ้มหากไม่ได้ระบุรหัสที่ซ้ำกันจริงและคุ้มค่าในการทำความสะอาดอยู่ดี หากคุณสามารถวิเคราะห์ประวัติการแก้ไขข้อผิดพลาดของคุณกับการเปลี่ยนแปลงรหัสของคุณคุณอาจพบฮอตสปอตที่ต้องการแก้ไขบ่อยครั้ง วิเคราะห์ฮอตสปอตเหล่านี้และคุณอาจพบว่าส่วนใหญ่เกิดจากตรรกะทางธุรกิจที่ซ้ำกันซึ่งผู้พัฒนามีการเปลี่ยนแปลงในที่เดียวโดยไม่ทราบว่าจำเป็นต้องเปลี่ยนแปลงสองครั้ง
2) เราควรทำอย่างไรในการสร้างวิดเจ็ตที่ใช้ร่วมกันส่วนประกอบไลบรารี ฯลฯ ที่สามารถนำไปใช้ในโครงการอื่น ๆได้
ในกรณีนี้คุณไม่ควรพยายามปิดตรรกะทางธุรกิจ แต่ใช้รหัสเฟรมเวิร์กร่วมกัน นี่อาจเป็นความสมดุลที่ยุ่งยากเนื่องจากค่าใช้จ่ายในการสร้างและบำรุงรักษาชุดขององค์ประกอบที่ใช้ร่วมกันอาจมีขนาดใหญ่มากและอาจเป็นเรื่องยากที่จะคาดการณ์ว่าอินสแตนซ์นั้นควรค่ากับการทำอะไร วิธีที่ฉันแนะนำที่นี่เป็นกฎสามครั้ง ไม่ต้องกังวลกับการเขียนโค้ดที่คล้ายกันสองครั้ง แต่เมื่อคุณจำเป็นต้องทำมันอีกครั้งในครั้งที่สาม refactor มันเป็นองค์ประกอบที่ใช้ร่วมกัน ณ จุดนี้คุณสามารถมั่นใจได้อย่างสมเหตุสมผลว่าจะมีประโยชน์และคุณมีความคิดที่ดีเกี่ยวกับข้อกำหนดที่กว้างขึ้นสำหรับส่วนประกอบ เห็นได้ชัดว่าการสื่อสารระหว่างนักพัฒนามีความสำคัญที่นี่
พิจารณาสร้างโอเพ่นซอร์สคอมโพเนนต์ที่ใช้ร่วมกันให้มากที่สุด มันไม่ใช่ตรรกะทางธุรกิจดังนั้นมันจะไม่ให้ความได้เปรียบกับคู่แข่งของคุณมากนัก แต่หมายความว่าคุณจะได้รับผู้ตรวจสอบและผู้ดูแลเพิ่มเติมฟรี