การปรับโครงสร้างใหม่คือ - และควรเป็นกระบวนการต่อเนื่อง ไม่เพียงพอที่จะตอบสนองความต้องการด้วยการใช้งานและการทดสอบที่ยังไม่สมบูรณ์เล็กน้อย
"ทำให้มันทำงานแล้วทำให้มันทำงานได้ดีขึ้น"
ฉันจำไม่ได้ว่าฉันอ่านคำพูดนั้นมาจากที่ใด แต่นี่เป็นกุญแจสำคัญในการปรับใช้การปรับสภาพให้ดีขึ้นและฉันถือว่ามันไม่เป็นมืออาชีพในการทำเช่นนั้น
การปรับโครงสร้างใหม่อย่างต่อเนื่องเปรียบเสมือนการเช็ดล้างคราบหกในขณะที่คุณกำลังทำอาหารและทำความสะอาดจานของคุณหลังจากที่คุณรับประทานอาหาร การปรับโครงสร้างตามเป้าหมายนั้นเหมือนกับการค้นหาครัวที่สกปรก แต่มีเวลาซักเพียงหนึ่งหรือสองแก้วเท่านั้น คุณอยากจะอยู่กับห้องครัวที่สกปรกต่อเนื่องหรือคุณต้องการที่จะรักษาความสะอาดในขณะที่คุณไปด้วยหรือไม่?
คุณได้รับรหัสการทำงานจากนั้นคุณ refactor รหัสของคุณเพื่อให้แน่ใจว่าคุณมีการใช้งานที่ดีที่สุดที่คุณสามารถใช้ หากคุณกำลังทำสิ่งที่คุ้นเคยอาจเป็นไปได้ว่าคุณใช้รหัสที่ดีที่สุดในครั้งแรก แต่อาจต้องใช้เวลาสักครู่เพื่อตรวจสอบงานของคุณอีกครั้ง หากดูเหมือนว่าคุณสามารถปรับปรุงรหัสของคุณได้คุณควรลองปรับโครงสร้างใหม่เพื่อให้แน่ใจว่ารหัสของคุณนั้นน้อยและสะอาดเท่าที่คุณสามารถทำได้ ซึ่งหมายความว่าคุณกำลังลดจำนวนหนี้ด้านเทคนิคที่คุณทิ้งไว้และทำให้คุณสามารถอ่านและปรับโครงสร้างได้ง่ายขึ้นในครั้งต่อไปที่ต้องจัดการกับรหัส นี่คือค่าหลักที่อยู่เบื้องหลังมนต์ TDD "Red-Green-Refactor" ยกเว้นว่าใน TDD ที่คุณ refactor เป็นหลักในการลบการทำซ้ำมันจ่ายเพื่อตรวจสอบรายการอื่น ๆ ที่สามารถ refactored เช่นชั้นเรียนขนาดใหญ่วิธีการยาว
หากคุณพบว่าตัวเองต้องเผชิญกับการออกแบบใหม่ที่สำคัญคุณอาจจะสามารถถอดมันออกได้ซักพักโดยเฉพาะอย่างยิ่งถ้าคุณทำงานช้าลงตามกำหนดเวลา อย่างไรก็ตามนี่คือการให้การทำงานของรหัสของคุณจะไม่ถูกบุกรุกและการดำเนินการดังกล่าวจะยังคงเป็นไปตามข้อกำหนด สถานการณ์แบบนี้น่าจะเป็นเหตุการณ์ที่เกิดขึ้นได้ยากและคุณสามารถช่วยให้มั่นใจได้ว่าจะหายากยิ่งขึ้นหากคุณกำลังทำการปรับโครงสร้างใหม่อย่างต่อเนื่อง สิ่งสำคัญยิ่งกว่านั้นคือคุณไม่สามารถเสี่ยงที่จะทิ้งการเปลี่ยนแปลงครั้งใหญ่ของคุณไว้นานเกินไปไม่เช่นนั้นคุณจะต้องสร้างเวิร์กโหลดที่ใหญ่กว่าในภายหลังซึ่งอาจมีค่าใช้จ่ายในการแก้ไขที่สูงกว่าหรืออาจทำให้สิ้นเปลืองมากขึ้น ความล้มเหลวของโครงการ
ฉันได้รับความประทับใจที่หลายคนมักจะสับสนกับคำจำกัดความของการปรับโครงสร้างและวิศวกรรมซ้ำ คำศัพท์สองคำนี้อธิบายกลยุทธ์ในการจัดการสถานการณ์ที่แตกต่างกันมาก หากคุณต้องการสร้างวิศวกรขึ้นใหม่คุณกำลังมุ่งมั่นที่จะเปลี่ยนแปลงอย่างมากซึ่งจะเปลี่ยนพฤติกรรมของระบบ วิธีนี้จะทำให้การทดสอบบางอย่างใช้ไม่ได้และจะต้องมีการทดสอบใหม่ เมื่อคุณทำการ Refactor คุณจะมั่นใจได้ว่าระบบของคุณยังคงทำงานได้อย่างแน่นอนเช่นเดียวกับที่ทำก่อนการเปลี่ยนแปลงอย่างไรก็ตามคุณยังมั่นใจได้ว่ารหัสของคุณจะมีอายุยืนและจะง่ายต่อการบำรุงรักษาเมื่อเวลาผ่านไป คุณไม่ได้ "นิด ๆ หน่อย ๆ " รหัสของคุณสำหรับนรกของมันคุณกำลังมุ่งมั่นที่จะมาตรฐานระดับมืออาชีพของรหัสที่สะอาดที่จะลดความเสี่ยงของความล้มเหลวและจะให้แน่ใจว่ารหัสของคุณยังคงมีความสุขในการทำงานและมาตรฐานวิชาชีพ .
กลับไปที่หน้าต่างที่แตกหักถ้าคุณแยกหน้าต่างคุณควรซ่อมแซมทันที หากคุณไม่ได้สังเกตเห็นว่าหน้าต่างเสียหายคุณต้องตัดสินใจว่าจะเสียค่าใช้จ่ายใดหากคุณปล่อยให้หน้าต่างแตก ทวนประโยคสองประโยคก่อนหน้านี้ซ้ำ แต่แทนที่Bugสำหรับหน้าต่าง. คุณต้องการกลยุทธ์ที่แตกต่าง หากคุณได้สร้างข้อบกพร่องในขณะที่คุณเขียนรหัสคุณจะแก้ไขได้ทันทีหรือคุณดูว่าการเปลี่ยนแปลงนั้นจะต้องใช้ความพยายามด้านวิศวกรรมอีกครั้งหรือไม่และคุณต้องตัดสินใจเชิงพาณิชย์ว่าจะแก้ไขปัญหาได้อย่างไร ดังนั้นคุณจะไม่ refactor เพื่อแก้ไขปัญหาคุณ refactor เพื่อให้แน่ใจว่าหาและแก้ไขปัญหาได้ง่ายขึ้น ฉันไม่สนใจว่าคุณคิดว่าโค้ดของคุณน่าอัศจรรย์เพียงใดระบบที่ซับซ้อนจะมีปัญหาที่จะต้องได้รับการจัดการเมื่อเวลาผ่านไป นี่คือทั้งหมดที่เกี่ยวกับหนี้สินทางเทคนิคและทำไมการปรับโครงสร้างระบบใหม่จึงจำเป็นต้องดำเนินการอย่างต่อเนื่องในขณะที่คุณติดตั้งรหัสของคุณและไม่เหลือเวลาไว้สำหรับอนาคต
ดังนั้นในระยะสั้นคำตอบว่าในบางครั้งอาจเป็นที่ยอมรับได้ในการเลื่อนการเปลี่ยนแปลงที่สำคัญของรหัสเพื่อกำหนดเวลาอย่างไรก็ตามไม่ควรถือว่าการปฏิบัติตามปกติในการรักษา refactoring เป็นการออกกำลังกายที่เป็นอิสระจากการใช้งานประจำวันของคุณและแน่นอน ไม่เคยใช้เป็นข้อแก้ตัวโดยทีมที่ไม่คุ้นเคยกับรหัสฐานเป็นตัวเลือกเพื่อหลีกเลี่ยงการทำให้มั่นใจว่าการติดตั้งของพวกเขานั้นไม่ติดมันและสะอาดที่สุดเท่าที่จะทำได้ภายใต้สถานการณ์