Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ฉันทำให้รหัสของฉันแห้ง และตอนนี้มันใช้งานยาก เกิดอะไรขึ้น?

“อย่าทำซ้ำตัวเอง” เป็นหนึ่งในแนวคิดที่มีค่าที่สุดจากหนังสือที่มีค่าที่สุดเล่มหนึ่งที่ฉันอ่านระหว่างอาชีพการพัฒนาซอฟต์แวร์ของฉัน หากคุณปรับโครงสร้างโค้ดที่ซ้ำกันออกไปได้ คุณจะได้สร้างโค้ดที่กว้างและเสถียรยิ่งขึ้น เมื่อคุณเริ่มสร้างโค้ดแบบแห้ง คุณจะเริ่มพบปัญหาบางอย่าง เช่น โค้ดที่ไม่สามารถจัดการกับ edge case ได้ดี โค้ดที่กว้างเกินไปและอ่านยาก หรือโค้ดที่หายาก หากการปรับโครงสร้างใหม่ไปสู่ความแห้งไม่ได้ผลตลอดเวลา คุณจะทราบได้อย่างไรว่าเมื่อใดควรปรับโครงสร้างใหม่

รหัส Too-DRY มาจากความเข้าใจผิดว่าคุณควรพยายามเปลี่ยนโครงสร้างซ้ำประเภทใด คุณต้องสามารถระบุความแตกต่างระหว่าง จำเป็น ซ้ำซ้อนและบังเอิญ ซ้ำซ้อน

จำเป็น การทำสำเนาคือรหัสที่แก้ปัญหาระดับที่คุณกำลังทำงานอยู่ นี่คือการทำซ้ำที่คุณควรฆ่าทันที

บังเอิญ การทำซ้ำคือการทำซ้ำที่ไม่เกี่ยวข้องกับปัญหาที่อยู่ในมือ "การทำซ้ำโดยบังเอิญ" หากคุณล้างข้อมูลการทำซ้ำโดยไม่ได้ตั้งใจมากเกินไป คุณจะได้โค้ดที่เปราะบางมากขึ้นซึ่งต้องยกเลิกการจัดองค์ประกอบใหม่เมื่อมีการเพิ่มเคสใหม่

แต่คุณจะบอกความแตกต่างได้อย่างไร? ด้วยประสบการณ์ คุณอาจจะเก่งขึ้นได้ แต่ถึงแม้จะผ่านการเขียนโปรแกรมมาหลายทศวรรษแล้ว ฉันยังทำไม่ได้เลยแม้แต่ครึ่งเดียว โชคดีที่มีกฎทั่วไปที่ช่วยได้มาก:Three Strikes and You Refactor

ครั้งแรกที่คุณทำอะไร คุณก็แค่ทำมัน

ครั้งที่สองที่คุณทำสิ่งที่คล้ายคลึงกัน คุณสะดุ้งกับการทำสำเนา แต่อย่างไรก็ตาม คุณยังทำสิ่งที่ซ้ำกัน

ครั้งที่สามที่คุณทำสิ่งที่คล้ายกัน คุณจะต้องปรับโครงสร้างใหม่

คุณเห็นไหมว่าทำไมสิ่งนี้ถึงช่วยได้? ในครั้งที่สาม คุณควรเริ่มดูว่ารูปแบบอยู่ที่ไหน คุณควรมีแนวคิดว่าโค้ดที่ซ้ำกันใดที่จำเป็นสำหรับการแก้ปัญหาของคุณ และโค้ดใดที่ดูเหมือนบังเอิญเหมือนกัน คุณสามารถเริ่มสรุป (และทำให้แห้ง) เพียงโค้ดที่พื้นฐาน เหมือนกันในทุกกรณีของปัญหาที่คุณพยายามแก้ไข

ใช้เวลาสักครู่แล้วนึกถึงครั้งสุดท้ายที่การปรับโครงสร้างใหม่ทำให้คุณเจ็บปวด คุณกำลังพยายามทำให้บางสิ่งที่ซ้ำกันระหว่างปัญหาสองชุด แต่สำเนาที่สามแตกต่างกันเล็กน้อยหรือไม่

และครั้งต่อไปที่คุณรู้สึกว่าต้องทำซ้ำโค้ด ให้ลองรอจนกระทั่งสำเนาที่สามก่อนที่จะทำการ refactor (มันยากและรู้สึกแย่มาก แต่หลับตาแล้วลองดู) จากนั้น ให้คิดเกี่ยวกับมันเมื่อคุณทำให้โค้ดแห้ง คุณกำลังรีแฟคเตอร์ต่างจากที่คุณคิดหรือไม่หากคุณรีแฟคเตอร์ทันทีหลังจากเขียนสำเนาที่สองแล้ว