เมื่อเร็ว ๆ นี้ฉันพบคำตอบที่ดีสำหรับคำถามของฉันใน "รหัสสะอาด" ของลุงบ๊อบซึ่งฉันต้องการแบ่งปัน เขาแยกความซ้ำซ้อนสามประเภท
ชิ้นส่วนของรหัสที่เหมือนกันควรถูกแทนที่ด้วยวิธีการเดียว ดังนั้นการแก้ไขจะแยกวิธีและมอบหมายให้พฤติกรรมทั่วไป
- ในวิธีการเดียวกันให้ดำเนินการ Extract Local Variable และนำมาใช้ซ้ำ
- ในคลาสเดียวกันให้ดำเนินการ refactoring วิธีการแยก
- ในชั้นเรียนของวิธีการแยกลำดับชั้นเดียวกันและดึงมันขึ้นมา ลำดับชั้นอาจถูกสร้างขึ้นเพื่อค้นหาสถานที่สำหรับวิธีการ
- ในชั้นเรียนของลำดับชั้นแยกใช้การมอบหมายให้วัตถุใหม่
- หากเมธอดไม่ต้องการสถานะการปิดล้อมใด ๆ รูปแบบ "lib" อาจถูกนำไปใช้ (นั่นคือคอนเทนเนอร์สำหรับเมธอดแบบสแตติกซึ่งมักเรียกว่า
SthUtil
หรือSthLib
)
กรณีของswitch/case
และif/else
ที่มักจะทดสอบชุดเงื่อนไขเดียวกัน
- เหล่านี้ควรถูกแทนที่ด้วย polymorphism
โมดูลที่ใช้อัลกอริทึมที่คล้ายกัน สิ่งเหล่านี้หายากที่สุดเนื่องจากไม่มีเครื่องตรวจจับโคลนที่สามารถค้นหาได้
- เนื่องจากขอบเขตเป็น patters การออกแบบขนาดใหญ่ที่ใช้ รูปแบบการออกแบบเมธอดเทมเพลตอาจถูกนำไปใช้กับอัลกอริทึมภายในลำดับชั้นของคลาส
- รูปแบบการออกแบบกลยุทธ์อาจใช้กับอัลกอริทึมใด ๆ ที่ใช้ในสถานที่ต่างกัน
นอกจากนี้ยังเป็นจุดที่ถูกต้องซึ่งถูกกล่าวถึงโดย Oded เมื่อจัดการกับไลบรารีเวอร์ชันต่าง ๆ
- รวมในรุ่นเดียว รูปแบบการออกแบบซุ้มอาจช่วยได้ที่นี่
ในที่สุดประโยคที่ดีที่สุดที่จะตอบคำถามของฉันคือโดยการกระตุ้น:
วิธีการใช้รหัสซ้ำที่ใช้ในภาษา OO คือวัตถุ