ตามที่ฉันระบุไว้ในคำตอบของคำถามอื่นแนวทางของฉันมีดังต่อไปนี้:
- ครั้งแรกที่ฉันแก้ปัญหาบางอย่างฉันเพิ่งทำเสร็จ
- ครั้งที่สอง (เช่นเมื่อฉันแก้ปัญหาที่คล้ายกัน) ฉันคิดว่า: หืมบางทีฉันอาจจะทำซ้ำตัวเอง แต่ฉันจะไปคัดลอกและวางอย่างรวดเร็วในตอนนี้
- ครั้งที่สามที่ฉันคิดว่า: หืมฉันซ้ำตัวเอง -> ทำให้เป็นเรื่องปกติ!
เช่นได้ถึง 2 หลักการอื่น (YAGNI) ชนะเหนือ DRY แต่เริ่มจาก 3 (หรือ 4 ถ้าฉันขี้เกียจจริงๆ!) ดูเหมือนว่าฉันจะต้องการมันและฉันก็เลยตาม DRY
ปรับปรุง
แนวคิดเพิ่มเติมจากประสบการณ์ล่าสุดของฉัน ฉันต้องดัดแปลง / รวมสององค์ประกอบ A และ B ที่พัฒนาโดยทีมอื่นในผลิตภัณฑ์ของเรา ครั้งแรก: ทั้งสององค์ประกอบ A และ B B คล้ายกันมากดังนั้นฉันจึงถูกรบกวนโดยความจริงที่ว่าพวกเขามีสถาปัตยกรรมที่แตกต่างกันบ้าง ข้อที่สอง: ฉันต้องปรับมันเพื่อให้ฉันดีใจที่ได้ใช้คลาสย่อยและแทนที่สิ่งที่ฉันต้องการจริงๆเท่านั้น
ดังนั้นฉันจึงเริ่มการรีแฟคเตอร์สององค์ประกอบเหล่านี้ (แต่ละอันประกอบด้วยคลาส 8 C ++): ฉันต้องการสถาปัตยกรรมทั่วไปสำหรับทั้ง A และ B แล้วเพิ่มคุณสมบัติที่เราต้องการโดยการกำหนดคลาสย่อย ด้วยวิธีนี้ส่วนประกอบใหม่ A และ B จะได้มาจากส่วนประกอบที่มีอยู่
หลังจากสองสัปดาห์พยายามที่จะทำให้โครงสร้างที่ใช้ร่วมกันและกำหนดออกมาจากรหัสที่มีอยู่และต้องอธิบายในระหว่างการประชุมประจำวันของเราที่ฉันกำลังคืบหน้าเล็กน้อยเพราะรหัสเดิมยุ่งเกินไปฉันพูดกับเจ้านายของฉัน เราสังเกตว่าเราจะไม่ต้องการอะไรมากไปกว่าองค์ประกอบใหม่สองตัว A 'และ B' (จะไม่มีสี่หรือหกชิ้นในนั้นทั้งสอง)
ตกลงไม่ว่าจะเป็น: ฉันทำสำเนาขนาดใหญ่และเปลี่ยนชื่อคลาสจาก A และ B และเริ่มปรับเปลี่ยนสำเนาของรหัส ฉันได้มันไปทำงานในอีกสองสัปดาห์ (ยังคงทำการแก้ไขข้อบกพร่องบางอย่างในขณะนี้)
ข้อดี: เรามีฟังก์ชั่นการทำงานเกือบเสร็จแล้วและเมื่อเราแก้ไขข้อบกพร่องทั้งหมดที่เราทำเสร็จแล้ว เราได้บันทึกการปรับโครงสร้างและการทดสอบ A และ B ทั้งหมดใหม่
ข้อเสีย: สองสัปดาห์ที่ผ่านมาทีมอื่นเปลี่ยนส่วนประกอบอีก C ซึ่งใช้โดย A และ B พวกเขาปรับ A และ B แต่ A 'และ B' ก็หักและเราต้องเปลี่ยนด้วยตนเอง นี่เป็นข้อผิดพลาดใหม่ที่เราต้องแก้ไข งานพิเศษนี้อาจไม่จำเป็นหาก A 'และ B' แบ่งปันรหัสส่วนใหญ่กับ A และ B
ดังนั้นการทำสำเนารหัสจึงเป็นอันตรายเสมอ ฉันคิดว่ามันเป็นเรื่องของการหาการแลกเปลี่ยนและมักจะไม่ใช่เรื่องง่าย