บทความบทนำของ wulin.com (www.vevb.com): คำว่าการปรับโครงสร้างนั้นถูกกำหนดโดยมาร์ตินฟาวเลอร์และเคนต์เบ็ค เป็นการปรับเปลี่ยนที่ทำให้โครงสร้างภายในของซอฟต์แวร์เข้าใจง่ายขึ้นและทำให้ซอฟต์แวร์เปลี่ยนแปลงได้ง่ายขึ้นโดยไม่ต้องเปลี่ยนพฤติกรรมที่มองเห็นได้ของซอฟต์แวร์ ... มันเป็นวิธีที่ จำกัด ในการจัดระเบียบรหัสและลดโอกาสในการสร้างข้อผิดพลาด
บางครั้งโปรแกรมเมอร์มาหาฉันและบอกว่าพวกเขาไม่ชอบการออกแบบบางสิ่งบางอย่างและเราต้องให้การสร้างใหม่ที่ครอบคลุมเพื่อแก้ไขข้อผิดพลาดในนั้น โอ้. นี่ไม่ได้เป็นความคิดที่ดี และนี่ไม่ได้ฟังเหมือนการปรับโครงสร้าง ...คำว่า refactoring นั้นถูกกำหนดโดย Martin Fowler และ Kent Beck เป็นการปรับเปลี่ยนที่ทำให้โครงสร้างภายในของซอฟต์แวร์เข้าใจง่ายขึ้นและทำให้ซอฟต์แวร์เปลี่ยนแปลงได้ง่ายขึ้นโดยไม่ต้องเปลี่ยนพฤติกรรมที่มองเห็นได้ของซอฟต์แวร์ ... มันเป็นวิธีที่ จำกัด ในการจัดระเบียบรหัสและลดโอกาสในการสร้างข้อผิดพลาด
ผลลัพธ์ของการสร้างใหม่คือวิธีการทางลัดมีการอ้างอิงรหัสซ้ำและรหัสที่ตายแล้วจะถูกลบออกทำให้การออกแบบและตรรกะชัดเจนขึ้น มันคือการใช้ภาษาการเขียนโปรแกรมดีขึ้นและฉลาดขึ้น มันเป็นข้อได้เปรียบของการใช้ข้อมูลที่คุณรู้ตอนนี้ แต่นักพัฒนาในเวลานั้นไม่ทราบหรือไม่ได้ใช้ ลดความซับซ้อนของรหัสอย่างต่อเนื่องเพื่อให้เข้าใจได้ง่ายขึ้น ทำให้การเปลี่ยนแปลงในอนาคตของพวกเขาง่ายขึ้นอย่างต่อเนื่องและปลอดภัยยิ่งขึ้น
ในระหว่างกระบวนการนี้พบข้อบกพร่องและมีการแก้ไขข้อบกพร่องซึ่งไม่ใช่การสร้างใหม่ การเพิ่มประสิทธิภาพไม่ใช่การสร้างใหม่ การเสริมสร้างข้อยกเว้นการจับภาพและการเพิ่มรหัสป้องกันไม่ได้ refactoring การทำให้รหัสง่ายขึ้นในการทดสอบไม่ใช่การปรับโครงสร้างใหม่ - แม้ว่าการปรับโครงสร้างใหม่จะได้ผลเหมือนกัน ทุกสิ่งเหล่านี้มีประโยชน์ แต่สิ่งเหล่านี้ไม่มีการปรับโครงสร้างใหม่
โปรแกรมเมอร์โดยเฉพาะผู้ที่ทำงานบำรุงรักษาการทำความสะอาดรหัสเป็นหนึ่งในงานประจำวันของพวกเขา นี่เป็นงานพื้นฐานและต้องทำ การมีส่วนร่วมของ Martin Fowler และคณะ คือการจัดรูปแบบวิธีการปฏิบัติที่ดีที่สุดของรหัส refactoring และเพื่อเก็บถาวรรูปแบบการปรับโครงสร้างที่มีประสิทธิภาพทั่วไปและพิสูจน์แล้ว - เป้าหมายของการปรับโครงสร้างใหม่และขั้นตอนของการปรับโครงสร้างใหม่ - สำหรับการจำแนกประเภทเก็บถาวร
Refactoring นั้นง่าย การเขียนการทดสอบก่อนเขียนโค้ดให้มากที่สุดเท่าที่จะเป็นไปได้สามารถป้องกันไม่ให้คุณทำผิดพลาด การปรับโครงสร้างขนาดเล็กอิสระและปลอดภัยกับรหัสและทดสอบพวกเขาหลังจากการปรับแต่ละครั้งเพื่อให้แน่ใจว่าคุณไม่ได้เปลี่ยนลักษณะพฤติกรรมของรหัส - ฟังก์ชั่นเหมือนเดิม แต่รหัสดูแตกต่างกัน โหมด Refactoring และเครื่องมือ refactoring IDE ที่ทันสมัยทำให้ refactoring ง่ายปลอดภัยและราคาไม่แพง
อย่า refactor เพื่อประโยชน์ในการ refactoring
การปรับโครงสร้างใหม่ถือได้ว่าเป็นมาตรการที่สามารถช่วยให้การเปลี่ยนแปลงรหัสของคุณ การปรับโครงสร้างรหัสควรทำก่อนที่คุณจะทำการเปลี่ยนแปลงรหัสซึ่งจะทำให้คุณมั่นใจได้ว่าคุณเข้าใจรหัสและทำให้ง่ายขึ้นและปลอดภัยยิ่งขึ้นในการแนะนำการเปลี่ยนแปลงในรหัส ทำการทดสอบการถดถอยในการดำเนินการ refactoring ของคุณ จากนั้นทำการแก้ไขหรือเปลี่ยนแปลง ทดสอบอีกครั้ง ในภายหลังอาจมีการปรับเปลี่ยนรหัสเพิ่มเติมเพื่อให้การเปลี่ยนรหัสของคุณชัดเจนขึ้น ทดสอบเสร็จสมบูรณ์อีกครั้ง สร้างใหม่และเปลี่ยนแปลงอีกครั้ง หรือเปลี่ยนแล้ว refactor
คุณไม่ได้ทำการปรับโครงสร้างใหม่เพื่อประโยชน์ในการปรับโครงสร้างใหม่คุณกำลังปรับโครงสร้างใหม่เพราะคุณต้องการทำสิ่งอื่น ๆ และ refactoring สามารถช่วยให้คุณทำสิ่งเหล่านี้ให้สำเร็จ
ขอบเขตของ refactoring ควรถูกกำหนดโดยการเปลี่ยนแปลงรหัสหรือการแก้ไขรหัสที่คุณต้องใช้ - คุณควรทำอย่างไรเพื่อให้การเปลี่ยนแปลงรหัสปลอดภัยและรัดกุมมากขึ้น? กล่าวอีกนัยหนึ่ง: อย่า refactor เพื่อประโยชน์ในการ refactoring อย่า refactor รหัสที่คุณไม่ได้ตั้งใจจะเปลี่ยนแปลงหรือจะไม่เปลี่ยนแปลง
รอยขีดข่วน refactoring เพื่อความเข้าใจ (refactoring รอยขีดข่วน)
หนังสือของ Michael Feather "ทำงานได้อย่างมีประสิทธิภาพด้วยรหัสมรดก" กล่าวถึงแนวคิดของการปรับเปลี่ยนรอยขีดข่วน Martin Fowler เรียกมันว่า refactoring เพื่อความเข้าใจ สิ่งนี้ใช้ในการจัดการกับรหัส (หรือไม่สามารถยืนได้) ที่คุณไม่เข้าใจทำความสะอาดพวกเขาเพื่อให้คุณสามารถเข้าใจสิ่งที่พวกเขาทำก่อนที่คุณจะปรับเปลี่ยนได้จริงและมันจะช่วยคุณแก้ไขข้อบกพร่องของรหัสเหล่านี้ เมื่อคุณสามารถเข้าใจความตั้งใจที่แท้จริงของตัวแปรหรือวิธีการเปลี่ยนชื่อพวกเขาให้ชื่อที่เหมาะสมกว่าพวกเขาลบรหัสที่คุณไม่ชอบอ่าน (หรือพบว่าไร้ประโยชน์) การแยกชิ้นส่วนคำสั่งที่ซับซ้อนและแบ่งโปรแกรมยาวออกเป็นโปรแกรมมินิที่เข้าใจง่ายหลายรายการ
ไม่ต้องกังวลเกี่ยวกับการตรวจสอบหรือทดสอบการเปลี่ยนแปลงเหล่านี้ นี่คือการทำให้ความคืบหน้าการสร้างใหม่ของคุณอย่างรวดเร็ว - สิ่งนี้ช่วยให้รหัสเหล่านี้และวิธีการทำงานเพื่อสร้างต้นแบบที่รวดเร็ว แต่ไม่สมบูรณ์ในสมองของคุณ เรียนรู้จากมันและทิ้งพวกเขาไป การสร้างใหม่สั้น ๆ ยังช่วยให้คุณลองใช้วิธีการสร้างใหม่และเรียนรู้เทคนิคการสร้างใหม่เพิ่มเติม Michael Feathers แนะนำว่าคุณควรให้ความสนใจกับสิ่งต่าง ๆ ที่ดูเหมือนไร้ประโยชน์หรือมีประโยชน์อย่างยิ่งในกระบวนการเพื่อให้คุณสามารถทำสิ่งต่าง ๆ ได้อย่างถูกต้องหลังจากที่คุณทำแบบฝึกหัดนี้และปรับเปลี่ยนพวกเขาจริงๆ
การฟื้นฟูขนาดใหญ่คืออะไร?
การสร้างรหัสใหม่ที่เรียบง่าย แต่ชัดเจน: กำจัดการทำซ้ำแก้ไขและเปลี่ยนตัวแปรและชื่อวิธีเพื่อให้มีความหมายมากขึ้นปรับแต่งวิธีการเพื่อให้รหัสง่ายขึ้นในการทำความเข้าใจและนำกลับมาใช้ใหม่ทำให้ตรรกะแบบมีเงื่อนไขง่ายขึ้นแทนที่ตัวเลขที่ไม่มีความหมายด้วยตัวแปรที่มีชื่อ ผ่านการปรับแต่งเหล่านี้คุณจะได้รับรางวัลมากมายในแง่ของความเข้าใจโค้ดและการบำรุงรักษา
เมื่อเทียบกับการสร้างใหม่ในสายการผลิตแบบเล็ก ๆ การออกแบบที่สำคัญยิ่งขึ้นนั้นแตกต่างจากพวกเขาอย่างมีนัยสำคัญ - นี่คือสิ่งที่มาร์ตินฟาวเลอร์อ้างถึงการสร้างใหม่ขนาดใหญ่ การเปลี่ยนแปลงที่มีค่าใช้จ่ายสูงจำนวนมากมาพร้อมกับความเสี่ยงทางเทคนิคมากมาย นี่ไม่ใช่รหัสการทำความสะอาดและการปรับปรุงการออกแบบในกระบวนการเขียนโปรแกรมของคุณ: เป็นการออกแบบขั้นพื้นฐาน
บางคนชอบเรียกใหม่หรือเขียนใหม่หรือสร้างระบบใหม่หรือทำงานใหม่ระบบที่เรียกว่าการสร้างใหม่ขนาดใหญ่ เนื่องจากในทางเทคนิคสิ่งเหล่านี้ไม่ได้เปลี่ยนลักษณะการทำงานของซอฟต์แวร์ - ตรรกะทางธุรกิจการป้อนข้อมูลซอฟต์แวร์และเอาต์พุตยังคงเหมือนเดิม แต่การออกแบบและการใช้งานรหัสมีการเปลี่ยนแปลง ความแตกต่างระหว่างมันและการสร้างใหม่แบบดั้งเดิมดูเหมือนจะเป็น: หนึ่งคือการเขียนรหัสชิ้นส่วนใหม่และอีกอันคือการเขียนระบบใหม่ ตราบใดที่คุณทำทีละขั้นตอนคุณสามารถเรียกมันว่าเป็นการสร้างใหม่ไม่ว่าคุณจะติดอยู่ในการแทนที่ระบบเก่าด้วยรหัสใหม่เป็นเวลาหลายปีหรือการแปลงสถาปัตยกรรมระบบขนาดใหญ่
refactoring ขนาดใหญ่จะแย่มาก อาจใช้เวลาหลายสัปดาห์เดือน (หรือปี) ที่จะเสร็จสมบูรณ์และคุณต้องทำการเปลี่ยนแปลงซอฟต์แวร์หลายส่วน ซอฟต์แวร์จะไม่ทำงานเป็นผลและการเปลี่ยนแปลงเหล่านี้จำเป็นต้องได้รับการปล่อยตัวในหลายครั้ง คุณต้องทำนั่งร้านชั่วคราวและวิธีแก้ปัญหา - โดยเฉพาะอย่างยิ่งเมื่อคุณใช้วิธีการพัฒนาวัฏจักรระยะสั้น ในเวลานี้วิธีการปฏิบัติเช่นสาขาโดยนามธรรมมีประโยชน์ซึ่งสามารถช่วยคุณจัดการการเปลี่ยนแปลงในรหัสของคุณในระยะเวลานาน
และในขณะที่พัฒนารหัสใหม่คุณต้องรักษารหัสเก่าซึ่งทำให้การควบคุมเวอร์ชันรหัสมีปัญหาและไม่สะดวกในการเปลี่ยนแปลงทำให้รหัสเปราะบางและง่ายต่อการทำผิดพลาด - สิ่งนี้ขัดกับจุดประสงค์ของการสร้างใหม่ บางครั้งสถานการณ์นี้ยังคงดำเนินต่อไป - กระบวนการของการสลับรหัสใหม่และเก่านี้ไม่สามารถทำให้เสร็จได้เนื่องจากผลประโยชน์ที่ดีที่สุดเกิดขึ้นก่อนหรือเพราะที่ปรึกษาที่นำความคิดในตอนแรกได้ทำอย่างอื่นหรืองบประมาณลดลงและคุณเกลียดการรักษาโครงการผัดวันประกันพรุ่ง
สิ่งเหล่านี้เป็นสิ่งที่ refactoring-lhose ไม่ใช่
มันผิดที่จะรวมแนวคิดของการสร้างใหม่ในการพัฒนาโครงการหนักเช่นนี้ พวกเขาเป็นงานประเภทอื่นโดยมีต้นทุนการพัฒนาและความเสี่ยงที่แตกต่างกันโดยสิ้นเชิง มันทำให้ผู้คนเข้าใจถึงความเข้าใจของผู้คนในการสร้างใหม่และการสร้างใหม่สามารถทำอะไรได้บ้าง
การปรับโครงสร้างใหม่สามารถและควรรวมเข้ากับกระบวนการเขียนหรือบำรุงรักษารหัสของคุณ - เป็นส่วนหนึ่งของการพัฒนา/การจัดการคุณภาพประจำวันเช่นการทดสอบการเขียนและบทวิจารณ์รหัส การปรับโครงสร้างควรจะเสร็จสิ้นอย่างเงียบ ๆ อย่างต่อเนื่องและ underiteding มันต้องการให้เราแบ่งพลังงานการทำงานของเราออกไปและจำเป็นต้องคำนึงถึงการมีอยู่ในการประเมินระยะเวลาการก่อสร้างและการประเมินความเสี่ยง หากทำอย่างถูกต้องคุณไม่จำเป็นต้องอธิบายหรือตรวจสอบส่วนนี้ของงานให้กับบุคคลภายนอก
การใช้เวลาไม่กี่นาทีหรือหนึ่งหรือสองชั่วโมงเพื่อ refactor เป็นเหมือนการปรับเปลี่ยนในกระบวนการพัฒนาของคุณและเป็นส่วนหนึ่งของงาน ถ้าใช้เวลาหลายวันหรือนานกว่านั้นมันไม่ใช่การปรับโครงสร้างใหม่ เป็นการเขียนใหม่หรือออกแบบใหม่ หากคุณต้องการตั้งค่าส่วนหนึ่งของเวลาอย่างชัดเจน (หรือรอบการวิ่งทั้งหมด) เพื่อสร้างรหัสใหม่หากคุณต้องการสมัครเพื่อขออนุมัติในการทำความสะอาดรหัสหรือใช้การทำความสะอาดรหัสเป็นข้อกำหนดการพัฒนาคุณจะไม่ได้รับการปรับปรุงใหม่แม้ว่าคุณจะใช้เทคนิคการปรับแต่งและเครื่องมือ
โปรแกรมเมอร์บางคนเชื่อว่ามันเป็นสิทธิและภาระผูกพันของพวกเขาที่จะทำการปรับเปลี่ยนพื้นฐานและสำคัญในรหัสและพวกเขาจะออกแบบใหม่และเขียนใหม่ในนามของการ refactoring เพื่อที่พวกเขาจะไม่ปล่อยทักษะของพวกเขาในอนาคต การออกแบบใหม่และการเขียนใหม่บางครั้งก็เป็นสิ่งที่ถูกต้องที่จะทำ แต่จากความตรงไปตรงมาและความชัดเจนโปรดอย่าให้ชื่อของการสร้างกิจกรรมเหล่านี้