คำถามติดแท็ก refactoring

การปรับโครงสร้างใหม่เป็นเทคนิคที่มีระเบียบวินัยสำหรับการปรับโครงสร้างของโค้ดที่มีอยู่เดิมแก้ไขโครงสร้างภายในโดยไม่เปลี่ยนพฤติกรรมภายนอก

6
วิธีลบฟังก์ชั่นหรือคุณสมบัติเมื่อใช้ TDD
ในข้อความเกี่ยวกับ TDD ฉันมักจะอ่านเกี่ยวกับ "ลบการทำซ้ำ" หรือ "ปรับปรุงการอ่าน" ในระหว่างขั้นตอนการสร้างใหม่ แต่อะไรทำให้ฉันลบฟังก์ชันที่ไม่ได้ใช้ออก สำหรับการพูดเช่นขอให้มีชั้นเรียนCด้วยวิธีการและa() b()ตอนนี้ผมคิดว่ามันจะดีที่จะมีวิธีการที่จะขับรถเข้าไปf() Cในความเป็นจริงf()แทนที่ทุกสายที่จะb()มีข้อยกเว้นของการทดสอบหน่วยที่กำหนดไว้ / b()อธิบาย ไม่จำเป็นอีกต่อไป - ยกเว้นการทดสอบ มันเป็นการประหยัดเพียงแค่ลบb()และการทดสอบทั้งหมดที่ใช้หรือไม่ เป็นส่วนหนึ่งของ "ปรับปรุงการอ่าน" หรือไม่?

3
ความยากลำบากในการใช้ TDD และการสร้างใหม่ (หรือ - ทำไมจึงเจ็บปวดกว่าที่ควรจะเป็น)
ฉันต้องการสอนตัวเองให้ใช้วิธีการของ TDD และฉันก็มีโครงการที่ฉันอยากจะทำอยู่พักหนึ่ง มันไม่ใช่โครงการขนาดใหญ่ดังนั้นฉันคิดว่ามันจะเป็นตัวเลือกที่ดีสำหรับ TDD อย่างไรก็ตามฉันรู้สึกว่ามีบางอย่างผิดปกติ ขอยกตัวอย่าง: ในระดับสูงโครงการของฉันเป็นส่วนเสริมสำหรับ Microsoft OneNote ที่จะให้ฉันติดตามและจัดการโครงการได้ง่ายขึ้น ตอนนี้ฉันยังต้องการให้ตรรกะทางธุรกิจสำหรับสิ่งนี้แยกออกจาก OneNote มากที่สุดในกรณีที่ฉันตัดสินใจที่จะสร้างที่เก็บข้อมูลที่กำหนดเองของฉันเองและกลับมาสิ้นสุดวันหนึ่ง ก่อนอื่นฉันเริ่มต้นด้วยการทดสอบการยอมรับคำธรรมดาเบื้องต้นเพื่อสรุปสิ่งที่ฉันต้องการให้คุณสมบัติแรกของฉันทำ ดูเหมือนบางสิ่งนี้ (ทำให้ลดความกระชับลง): ผู้ใช้คลิกสร้างโครงการ ผู้ใช้พิมพ์ชื่อเรื่องของโครงการ ตรวจสอบว่าโครงการสร้างขึ้นอย่างถูกต้อง ข้ามสิ่งที่ UI และการวางแผนตัวกลางฉันมาทดสอบหน่วยแรกของฉัน: [TestMethod] public void CreateProject_BasicParameters_ProjectIsValid() { var testController = new Controller(); Project newProject = testController(A.Dummy<String>()); Assert.IsNotNull(newProject); } จนถึงตอนนี้ดีมาก สีแดงเขียว refactor ฯลฯ เอาล่ะตอนนี้มันต้องการบันทึกของจริง ตัดขั้นตอนที่นี่ฉันปิดท้ายด้วยสิ่งนี้ [TestMethod] public void CreateProject_BasicParameters_ProjectMatchesExpected() { …

8
การจัดการกับเพื่อนร่วมงานเมื่อมีการพัฒนาต้องการคำแนะนำ [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ผมพัฒนาสถาปัตยกรรมโครงการปัจจุบันของเราและเริ่มพัฒนามันในตัวเอง(บางสิ่งบางอย่างถึงชอบ )revision 40 เรากำลังพัฒนาเฟรมเวิร์กการกำหนดเส้นทางรถไฟใต้ดินที่เรียบง่ายและการออกแบบของฉันก็ทำได้ดีมาก - โมเดลหลักหลายมุมมองที่สอดคล้องกันตรรกะหลักและโครงสร้างข้อมูลถูกสร้างแบบจำลอง "ที่ควรจะเป็น" และแยกออกจากการเรนเดอร์ นอกเหนือจากโมเดลหลักและมีจุดตัดเล็ก ๆ น้อย ๆ จำนวนหนึ่ง ฉันจะเรียกว่าการออกแบบที่ปรับขนาดได้ปรับแต่งได้ง่ายต่อการใช้งานการโต้ตอบส่วนใหญ่ขึ้นอยู่กับ "ปฏิสัมพันธ์กล่องดำ" และดีมาก ตอนนี้สิ่งที่ทำ: ฉันเริ่มต้นการใช้งานอินเทอร์เฟซที่เกี่ยวข้องบางอย่างย้ายบางไลบรารีที่สะดวกและเขียนส่วนการปรับใช้สำหรับบางส่วนของแอปพลิเคชัน ฉันมีเอกสารที่อธิบายถึงรูปแบบการเข้ารหัสและตัวอย่างของการใช้รูปแบบการเข้ารหัสนั้น (รหัสที่เป็นลายลักษณ์อักษรของฉันเอง) ฉันบังคับให้ใช้C++เทคนิคการพัฒนาที่ทันสมัยมากขึ้นหรือน้อยลงรวมถึงno-deleteโค้ด (ซึ่งพันผ่านตัวชี้อัจฉริยะ) และอื่น ๆ ฉันบันทึกวัตถุประสงค์ของการใช้งานอินเทอร์เฟซที่เป็นรูปธรรมและวิธีการใช้งาน การทดสอบหน่วย(ส่วนใหญ่เป็นการทดสอบการรวมเนื่องจากไม่มีรหัส "จริง" จำนวนมาก)และชุด mocks สำหรับ abstractions หลักทั้งหมด ฉันขาดเป็นเวลา …

4
การมีตัวแปรอินสแตนซ์มากเกินไปนำไปสู่การทำซ้ำรหัสได้อย่างไร
ตามRefactoring เพื่อรูปแบบ : เมื่อคลาสพยายามทำมากเกินไปมันมักจะแสดงตัวแปรอินสแตนซ์มากเกินไป เมื่อคลาสมีตัวแปรอินสแตนซ์มากเกินไปรหัสที่ซ้ำกันจะไม่สามารถล้าหลังได้ การมีตัวแปรอินสแตนซ์มากเกินไปนำไปสู่การทำซ้ำรหัสได้อย่างไร

6
ฉันจะสร้างฐานรหัสใหม่ได้อย่างไรในขณะที่คนอื่นยอมรับอย่างรวดเร็ว
ฉันอยู่ในโครงการส่วนตัวที่ในที่สุดจะกลายเป็นโอเพนซอร์ส เรามีสมาชิกในทีมไม่กี่คนที่มีความสามารถเพียงพอที่จะใช้เทคโนโลยีในการสร้างแอพ แต่ไม่ได้เป็นนักพัฒนาที่สามารถเขียนโค้ดที่สะอาด / สวยงามและที่สำคัญที่สุดคือรหัสบำรุงรักษาระยะยาว ฉันได้ออกเดินทางเพื่อปรับโครงสร้างฐานรหัสใหม่ แต่ก็ไม่ค่อยจะดีเท่าที่ใครบางคนในทีมในประเทศอื่นที่ฉันไม่ได้ติดต่อด้วยเป็นประจำจะสามารถอัปเดตสิ่งนี้แยกกันโดยสิ้นเชิง ฉันรู้ว่าวิธีหนึ่งคือการสื่อสารอย่างรวดเร็วหรือนำแนวทางปฏิบัติของ PM มาใช้ แต่เราก็ยังไม่ใหญ่ขนาดนั้น ฉันแค่ต้องการทำความสะอาดโค้ดและรวมเข้ากับสิ่งที่เขาอัพเดต การใช้สาขาเป็นแผนที่เหมาะสมหรือไม่ การผสานที่ดีที่สุด? อื่น ๆ อีก?

7
ฉันควรเปลี่ยนชื่อผู้แต่งในไฟล์คลาสหรือไม่ถ้าฉันทำการเปลี่ยนแปลงมากกว่า 80%?
ฉันกำลัง refactoring ชุดทดสอบคลาส Java ที่มีอยู่สำหรับการทดสอบ UI อัตโนมัติ บางครั้งฉันก็ทำการเปลี่ยนแปลงครั้งใหญ่ในไฟล์คลาสหรือปรับปรุงใหม่ทั้งหมด นี่ทำให้ฉันคิดว่าเมื่อฉันเขียนทั้งชั้นฉันควรเปลี่ยนชื่อผู้แต่งในส่วนความคิดเห็นเป็นของฉันหรือไม่ ฉันเป็นคนโลภใช่ไหม หรือมันจะมีประโยชน์สำหรับคนที่จะเห็นชื่อของฉันและถามฉันในกรณีที่มีข้อสงสัย?

6
รหัสเอกสารด้วยตนเองเทียบกับ Javadocs?
เมื่อไม่นานมานี้ฉันกำลังทำงานเกี่ยวกับการปรับโครงสร้างส่วนต่าง ๆ ของรหัสที่ฉันกำลังทำอยู่ไม่เพียง แต่จะเข้าใจตัวเองดีขึ้น แต่ยังทำให้ผู้อื่นที่ทำงานกับรหัสนั้นง่ายขึ้น ฉันมักจะพึ่งพาด้านของความคิดที่ว่าตนเอง documenting รหัสเป็นสิ่งที่ดี ฉันแค่คิดว่ามันสะอาดและถ้ารหัสพูดสำหรับตัวเองดี ... ที่ดี ในอีกทางหนึ่งเรามีเอกสารเช่น javadocs ฉันชอบสิ่งนี้เช่นกัน แต่มีความเสี่ยงบางอย่างที่ความคิดเห็นที่นี่ล้าสมัย (เช่นเดียวกับความคิดเห็นทั่วไป) อย่างไรก็ตามหากพวกเขาทันสมัยพวกเขาจะมีประโยชน์อย่างมากในการพูดทำความเข้าใจกับอัลกอริทึมที่ซับซ้อน อะไรคือแนวทางปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้ คุณวาดเส้นระหว่างรหัสการทำเอกสารด้วยตนเองและ javadocs ได้อย่างไร

3
วิธีจัดการกับข้อ จำกัด กุญแจต่างประเทศเมื่อทำการย้ายจากก้อนหินใหญ่ไปเป็นไมโครเซอร์วิซ?
ทีมของฉันกำลังย้ายจากแอปพลิเคชัน ASP.NET แบบเสาหินไปยัง. NET Core และ Kubernetes การเปลี่ยนแปลงรหัสดูเหมือนจะเป็นไปตามคาด แต่ทีมของฉันกำลังเผชิญกับความไม่ลงรอยกันอยู่รอบฐานข้อมูล ขณะนี้เรามีฐานข้อมูล SQL Server ค่อนข้างใหญ่ที่รวบรวมข้อมูลทั้งหมดสำหรับธุรกิจทั้งหมดของเรา ฉันเสนอให้เราแยกฐานข้อมูลในลักษณะที่คล้ายคลึงกับการแยกรหัส - ข้อมูลแคตตาล็อกในฐานข้อมูลหนึ่ง (ตรรกะ) ข้อมูลสินค้าคงคลังในอีกคำสั่งซื้อในอื่นและอื่น ๆ - และแต่ละ microservice จะเป็นผู้ดูแลฐานข้อมูลของมัน . ความหมายที่นี่คือกุญแจต่างประเทศที่ข้ามขอบเขตการให้บริการจะต้องถูกลบออก แบบจำลองข้อมูลทั้งหมดอาจหรือไม่อาจอยู่ในฐานข้อมูลทางกายภาพเดียวกัน แต่แม้ว่าพวกเขาทำแบบนั้นพวกเขาไม่ควรโต้ตอบกันโดยตรง คำสั่งซื้ออาจยังคงอ้างอิงรายการแคตตาล็อกโดย Id แต่ความสมบูรณ์ของข้อมูลจะไม่ถูกบังคับใช้อย่างเคร่งครัดในระดับฐานข้อมูลและข้อมูลนั้นจะต้องเข้าร่วมในรหัสมากกว่าใน SQL ฉันเห็นการสูญเสียสิ่งเหล่านี้เมื่อมีการแลกเปลี่ยนที่จำเป็นเมื่อต้องย้ายไปที่ไมโครเซอร์วิสและรับผลประโยชน์ที่ปรับขนาดได้ที่มาพร้อมกับ ตราบใดที่เราเลือกตะเข็บของเราอย่างชาญฉลาดและพัฒนาไปรอบ ๆ มันก็น่าจะดี สมาชิกในทีมคนอื่น ๆ ยืนกรานว่าทุกอย่างจะต้องอยู่ในฐานข้อมูลเสาหินเดียวกันดังนั้นทุกอย่างสามารถเป็นกรดและรักษาความสมบูรณ์ของการอ้างอิงได้ทุกที่ สิ่งนี้นำมาสู่คำถามของฉัน ก่อนอื่นท่าทางของฉันเกี่ยวกับข้อ จำกัด ของคีย์ต่างประเทศและเข้าร่วมเป็นไปได้หรือไม่ ถ้าเป็นเช่นนั้นมีใครรู้บ้างเกี่ยวกับวัสดุการอ่านที่น่าเชื่อถือที่ฉันสามารถเสนอให้เพื่อนร่วมงานของฉันได้หรือไม่? ตำแหน่งของพวกเขาเกือบจะเป็นศาสนาและพวกเขาดูเหมือนว่าพวกเขาจะถูกครอบงำด้วยอะไรก็ตามที่สั้น ๆ ของ Martin Fowler เขาบอกพวกเขาว่าพวกเขาผิด

7
จะปรับเวลาในการปรับรหัสให้ใหม่ได้อย่างไร
มีโครงการขนาดใหญ่กว่า 70k LOC โครงการจำเป็นต้องมีการเปลี่ยนรหัสใหม่ใน Core Framework และในส่วนอื่น ๆ เช่นกัน ไม่มีการกำหนดเวลาในการเริ่มต้นของโครงการสำหรับการปรับโครงสร้างใหม่ อย่างไรก็ตามด้วยเวลาและมากกว่า 40 นักพัฒนาร่วมกันและออกจากโครงการ จากมุมมองของฉันเป็นสิ่งที่ขาดไม่ได้ อะไรคือประเด็นสำคัญของคุณในการพิจารณาและปกป้องหลักการพัฒนาซอฟต์แวร์ที่เหมาะสม

3
การลดการกระแทกซ้ำและการทำความสะอาดโค้ดของเลอะเทอะขณะรอความต้องการ
ฉันสืบทอดฐานรหัสที่มีอยู่สำหรับผลิตภัณฑ์ที่เลอะเทอะอย่างน่ากลัว การออกแบบขั้นพื้นฐานไม่เพียงพอพอสมควรซึ่งน่าเสียดายที่ฉันสามารถทำได้เพียงเล็กน้อยโดยไม่มี refactor ที่สมบูรณ์ (การเชื่อมต่อสูงการทำงานร่วมกันต่ำการทำซ้ำรหัสอาละวาดไม่มีเอกสารการออกแบบทางเทคนิคการทดสอบบูรณาการแทนการทดสอบหน่วย) ผลิตภัณฑ์มีประวัติการสัมผัสกับลูกค้าที่สำคัญ "เงินสดวัว" ที่มีความอดทนน้อยที่สุดสำหรับความเสี่ยงหนี้ทางเทคนิคที่จะทำให้ชาวกรีกหน้าแดงรหัสฐานขนาดใหญ่และความซับซ้อนมากและวิธีการพ่ายแพ้การสู้รบเหนื่อยล้าทีมก่อน ฉัน. ทีมเก่ากระโดดเรือไปยังอีกแผนกหนึ่งเพื่อให้พวกเขามีโอกาสทำลายโครงการอื่น เป็นเรื่องยากมากที่ฉันประสบกับความล้มเหลวทางเทคนิคของโครงการเมื่อเทียบกับความล้มเหลวในการจัดการโครงการ แต่นี่เป็นหนึ่งในกรณีเหล่านั้น สำหรับช่วงเวลาที่ฉันอยู่คนเดียว แต่ฉันมีเวลามากอิสระในการตัดสินใจและทิศทางในอนาคตและความสามารถในการสร้างทีมตั้งแต่เริ่มต้นเพื่อช่วยฉัน คำถามของฉันคือการรวบรวมความคิดเห็นเกี่ยวกับการรีแฟคเจอริ่งผลกระทบต่ำในโครงการเช่นนี้เมื่อคุณมีเวลาว่างระหว่างขั้นตอนการรวบรวมข้อกำหนดการทำงาน มีคำเตือนของคอมไพเลอร์หลายพันคำซึ่งเกือบทั้งหมดเป็นการอิมพอร์ตที่ไม่ได้ใช้ตัวแปรที่ไม่ได้อ่านที่ยังไม่อ่านการตรวจสอบชนิดและการส่งแบบไม่ปลอดภัย การจัดรูปแบบโค้ดนั้นอ่านไม่ได้และเลอะเทอะมากจนดูเหมือนว่า coder ได้รับความทุกข์จากโรค Parkinsons และไม่สามารถควบคุมจำนวนครั้งที่แถบพื้นที่ถูกกดบนบรรทัดที่กำหนด ฐานข้อมูลและทรัพยากรไฟล์เพิ่มเติมมักจะเปิดและไม่เคยปิดอย่างปลอดภัย อาร์กิวเมนต์วิธีที่ไม่มีจุดหมายวิธีการที่ซ้ำกันที่ทำสิ่งเดียวกัน ฯลฯ ในขณะที่ฉันกำลังรอข้อกำหนดสำหรับคุณสมบัติถัดไปฉันทำความสะอาดสิ่งที่มีความเสี่ยงต่ำที่มีผลกระทบต่ำเมื่อฉันไปและสงสัยว่าฉันกำลังเสียเวลาหรือทำสิ่งที่ถูกต้อง จะเกิดอะไรขึ้นถ้าคุณสมบัติใหม่หมายถึงการริปโค้ดที่ฉันใช้ไปก่อนหน้านี้? ฉันจะเริ่มต้นวิธีการแบบ Agile และฉันเข้าใจว่าสิ่งนี้เป็นที่ยอมรับและเป็นเรื่องปกติที่จะมีการปรับโครงสร้างอย่างต่อเนื่องในระหว่างการพัฒนาแบบ Agile คุณสามารถนึกถึงผลกระทบเชิงบวกหรือเชิงลบของฉันที่ทำสิ่งนี้ที่คุณต้องการเพิ่มหรือไม่?

8
ใครบ้างที่มีปัญหาการปรับโครงสร้างใหม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ดูเหมือนว่าหลังจากที่ฉันเขียนโค้ดจำนวนมากฉันรู้สึกกังวลอย่างที่ไม่ได้ทำในวิธีที่ดีที่สุดเท่าที่จะเป็นไปได้และท้ายที่สุดฉันก็ทำการปรับโครงสร้างใหม่และใช้เวลามากเกินไปในโครงการหรือไม่เคยได้รับเลย มันทำบางครั้ง สิ่งนี้เกิดขึ้นกับใครบ้างและคุณจะจัดการกับเรื่องนี้อย่างไร?

6
เมื่อใดที่ enums ไม่มีกลิ่นรหัส
ภาวะที่กลืนไม่เข้าคายไม่ออก ฉันได้อ่านหนังสือฝึกหัดที่ดีที่สุดมากมายเกี่ยวกับการฝึกฝนเชิงวัตถุและหนังสือเกือบทุกเล่มที่ฉันอ่านมีส่วนที่พวกเขาบอกว่า enums เป็นกลิ่นรหัส ฉันคิดว่าพวกเขาพลาดส่วนที่พวกเขาอธิบายเมื่อ enums ถูกต้อง ดังนั้นฉันกำลังมองหาแนวทางและ / หรือกรณีการใช้งานที่ enums ไม่ได้กลิ่นรหัสและในความเป็นจริงโครงสร้างที่ถูกต้อง แหล่งที่มา: "คำเตือนตามกฎของหัวแม่มือ, enums เป็นรหัสที่มีกลิ่นและควรได้รับการ refactored เพื่อเรียน polymorphic [8]" Seemann, Mark, การฉีดพึ่งพาใน. Net, 2011, p. 342 [8] Martin Fowler et al., Refactoring: การปรับปรุงการออกแบบของรหัสที่มีอยู่ (นิวยอร์ก: Addison-Wesley, 1999), 82 บริบท สาเหตุของภาวะที่กลืนไม่เข้าคายไม่ออกของฉันคือการซื้อขาย API พวกเขาให้กระแสข้อมูล Tick โดยส่งผ่านวิธีนี้: void TickPrice(TickType tickType, double value) ที่ไหน …

5
วิธีหลีกเลี่ยงวิธีการมากไปที่มากไป?
เรามีสถานที่ค่อนข้างมากในซอร์สโค้ดของแอปพลิเคชันของเราที่คลาสหนึ่งมีวิธีการมากมายที่มีชื่อเดียวกันและพารามิเตอร์ที่แตกต่างกัน วิธีการเหล่านั้นมักจะมีพารามิเตอร์ทั้งหมดของวิธี 'ก่อนหน้า' บวกอีกหนึ่ง มันเป็นผลมาจากวิวัฒนาการที่ยาวนาน (รหัสดั้งเดิม) และความคิดนี้ (ฉันเชื่อ): " มีวิธี M ที่ทำสิ่ง A. ฉันต้องทำ A + B ตกลงฉันรู้ ... ฉันจะเพิ่มพารามิเตอร์ใหม่ให้กับ M สร้างวิธีการใหม่เพื่อย้ายรหัสจาก M ไปยังวิธีใหม่ ด้วยพารามิเตอร์อีกหนึ่งตัวให้ทำ A + B ตรงนั้นแล้วเรียกวิธีการใหม่จาก M ด้วยค่าเริ่มต้นของพารามิเตอร์ใหม่ " นี่คือตัวอย่าง (ในภาษา Java-like-language): class DocumentHome { (...) public Document createDocument(String name) { // just calls another method with …

1
เหตุผลที่จะรอจนถึงครั้งที่สามใน Rule of Three?
ฉันเพิ่งเจอบทความ " Rule of Three " ในวิกิพีเดีย กฎข้อที่สามคือกฎการเปลี่ยนรหัสใหม่ของหัวแม่มือเพื่อตัดสินใจว่าเมื่อใดควรเปลี่ยนชิ้นส่วนของรหัสที่ทำซ้ำโดยขั้นตอนใหม่ มันระบุว่าสามารถคัดลอกรหัสหนึ่งครั้ง แต่เมื่อใช้รหัสเดียวกันสามครั้งมันจะถูกแยกลงในกระบวนการใหม่ กฎดังกล่าวได้รับการแนะนำโดย Martin Fowler ใน Refactoring และอ้างถึง Don Roberts ฉันรู้ว่านี่เป็นเพียงกฎของหัวแม่มือ แต่ทำไมมันแนะนำให้ refactor หลังจากทำซ้ำที่สอง? มีข้อเสียใด ๆ ในการปรับโครงสร้างเมื่อเราเขียนการทำซ้ำครั้งแรก

9
ใช้วิธีสร้างหรือตั้งค่า?
ฉันกำลังทำงานกับรหัส UI ที่ฉันมีActionชั้นเรียนเช่นนี้ - public class MyAction extends Action { public MyAction() { setText("My Action Text"); setToolTip("My Action Tool tip"); setImage("Some Image"); } } เมื่อคลาส Action นี้ถูกสร้างขึ้นมันค่อนข้างจะสันนิษฐานได้ว่าActionคลาสนั้นจะไม่สามารถปรับแต่งได้ (ในความหมาย - ข้อความคำแนะนำเครื่องมือหรือรูปภาพจะไม่สามารถเปลี่ยนแปลงได้ทุกที่ในรหัส) ตอนนี้เราต้องการเปลี่ยนข้อความการกระทำในบางตำแหน่งในโค้ด ดังนั้นฉันแนะนำเพื่อนร่วมงานของฉันให้ลบข้อความการกระทำที่ฮาร์ดโค้ดออกจากตัวสร้างและยอมรับว่าเป็นอาร์กิวเมนต์เพื่อให้ทุกคนถูกบังคับให้ส่งข้อความการกระทำ บางอย่างเช่นรหัสด้านล่าง - public class MyAction extends Action { public MyAction(String actionText) { setText(actionText); setTooltip("My Action tool tip"); setImage("My …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.