บางครั้งการทำสำเนารหัสเป็นผลมาจาก "pun": สองสิ่งดูเหมือนกัน แต่ไม่ใช่
เป็นไปได้ว่าการสรุปเกินจริงสามารถทำลายโมดุลที่แท้จริงของระบบของคุณ ภายใต้ระบอบการปกครองแบบแยกส่วนคุณต้องตัดสินใจว่า "มีแนวโน้มที่จะเปลี่ยนแปลงอย่างไร" และ "อะไรที่เสถียร" อะไรก็ตามที่มีความเสถียรนั้นจะถูกใส่เข้าไปในอินเตอร์เฟสในขณะที่สิ่งที่ไม่เสถียรจะถูกห่อหุ้มในการนำโมดูลไปใช้ จากนั้นเมื่อสิ่งต่าง ๆ เปลี่ยนแปลงการเปลี่ยนแปลงที่คุณต้องทำจะถูกแยกออกจากโมดูลนั้น
การสร้างใหม่นั้นเป็นสิ่งจำเป็นเมื่อสิ่งที่คุณคิดว่ามีเสถียรภาพ (เช่นการเรียก API นี้จะต้องมีการโต้แย้งสองครั้ง) จำเป็นต้องเปลี่ยน
ดังนั้นสำหรับส่วนของโค้ดที่ซ้ำกันทั้งสองนี้ฉันจะถามว่า: การเปลี่ยนแปลงที่จำเป็นต้องมีอย่างใดอย่างหนึ่งหมายความว่าอีกคนต้องเปลี่ยนเช่นกันหรือไม่?
วิธีที่คุณตอบคำถามนั้นอาจช่วยให้คุณเข้าใจถึงสิ่งที่เป็นนามธรรมได้ดีขึ้น
รูปแบบการออกแบบเป็นเครื่องมือที่มีประโยชน์ บางทีรหัสที่ซ้ำกันของคุณกำลังทำการข้ามผ่านบางรูปแบบและควรใช้รูปแบบตัววนซ้ำ
หากรหัสที่ซ้ำกันของคุณมีค่าส่งคืนหลายค่า (และนั่นคือสาเหตุที่คุณไม่สามารถแยกวิธีง่าย ๆ ได้) บางทีคุณควรสร้างคลาสที่เก็บค่าที่ส่งคืน ชั้นสามารถเรียกวิธีนามธรรมสำหรับแต่ละจุดที่แตกต่างกันระหว่างสองส่วนรหัส จากนั้นคุณจะทำให้การใช้งานที่เป็นรูปธรรมสองประการของคลาส: หนึ่งสำหรับแต่ละส่วน [นี่เป็นรูปแบบการออกแบบเทมเพลตอย่างมีประสิทธิภาพเพื่อไม่ให้สับสนกับแนวคิดของเทมเพลตใน C ++ หรือสิ่งที่คุณกำลังดูอาจแก้ไขได้ดีกว่าด้วยรูปแบบกลยุทธ์]
อีกวิธีที่เป็นธรรมชาติและมีประโยชน์ที่จะคิดเกี่ยวกับมันคือฟังก์ชั่นการสั่งซื้อที่สูงขึ้น ตัวอย่างเช่นการสร้าง lambdas หรือใช้คลาสภายในที่ไม่ระบุชื่อเพื่อให้รหัสผ่านไปยังสิ่งที่เป็นนามธรรม โดยทั่วไปคุณสามารถลบการทำซ้ำได้เว้นแต่ว่าจะมีความสัมพันธ์ระหว่างพวกเขา [หากมีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งดังนั้นสิ่งอื่น ๆ ] ต้องทำให้คุณเจ็บปวดแบบโมดูลาร์โดยไม่ช่วยเหลือ