แนวทางปฏิบัติที่ดีที่สุดสำหรับการเปลี่ยนชื่อสร้างใหม่และทำลายการเปลี่ยนแปลงกับทีม


10

แนวทางปฏิบัติที่ดีที่สุดสำหรับการ refactor และการเปลี่ยนชื่อในสภาพแวดล้อมของทีมมีอะไรบ้าง ฉันนำเรื่องนี้มาพิจารณากับสถานการณ์บางอย่าง:

  1. หากไลบรารีที่มีการอ้างอิงโดยทั่วไปนั้นถูก refactored เพื่อแนะนำการเปลี่ยนแปลงที่เกิดขึ้นกับไลบรารีหรือโครงการใด ๆ ที่อ้างอิงมัน เช่นการเปลี่ยนชื่อของวิธีการโดยพลการ

  2. หากโครงการถูกเปลี่ยนชื่อและโซลูชั่นจะต้องสร้างใหม่ด้วยการอ้างอิงการปรับปรุงให้พวกเขา

  3. หากโครงสร้างโครงการเปลี่ยนเป็น "จัดระเบียบมากขึ้น" โดยแนะนำโฟลเดอร์และย้ายโครงการหรือโซลูชันที่มีอยู่ไปยังตำแหน่งใหม่

ความคิด / คำถามเพิ่มเติมบางอย่าง:

  1. การเปลี่ยนแปลงในเรื่องนี้หรือความเจ็บปวดที่เกิดขึ้นบ่งบอกถึงโครงสร้างที่ผิดปกติหรือไม่?

  2. ใครควรรับผิดชอบในการแก้ไขข้อผิดพลาดที่เกี่ยวข้องกับการเปลี่ยนแปลงที่ผิดพลาด? หากผู้พัฒนาทำการเปลี่ยนแปลงที่ไม่เหมาะสมพวกเขาควรรับผิดชอบในการเข้าไปในโครงการที่ได้รับผลกระทบและอัปเดตพวกเขาหรือพวกเขาควรเตือนผู้พัฒนารายอื่นและแจ้งให้พวกเขาเปลี่ยนแปลงสิ่งต่างๆ

  3. นี่เป็นสิ่งที่สามารถทำได้ตามกำหนดเวลาหรือเป็นสิ่งที่ควรทำบ่อยที่สุดเท่าที่จะทำได้? หากการรีฟอร์เรชั่นถูกเลื่อนออกไปนานเกินไปมันก็ยากที่จะกระทบยอด แต่ในเวลาเดียวกันในแต่ละวันใช้เวลาเพิ่มขึ้น 1 ชั่วโมงในการแก้ไขงานสร้างเนื่องจากการเปลี่ยนแปลงเกิดขึ้นที่อื่น

  4. นี่เป็นเรื่องของกระบวนการสื่อสารที่เป็นทางการหรือเป็นอินทรีย์หรือไม่?


1
เรียกเก็บเงินจากทุกคนในราคา $ 1 สำหรับทุกครั้งที่พวกเขาทำลายการสร้าง ... คุณจะแปลกใจว่าจะลดความผิดพลาดที่ไม่ระมัดระวัง
Berin Loritsch

+1 เนื่องจากความคิดเห็นของคุณเป็นแรงบันดาลใจ 3 คำตอบที่ยอดเยี่ยมและแตกต่าง
Carl Manaster

คำตอบ:


13

แต่ละสถานการณ์ที่คุณแสดงอยู่ในหมวดหมู่ของ "API / รหัสที่เผยแพร่" นี่เป็นการยากที่จะปรับโครงสร้างใหม่ดังนั้นจึงไม่ควรเปลี่ยนแปลงสิ่งเล็กน้อย แต่เขาควรเจรจาการเปลี่ยนแปลงที่วางแผนไว้ล่วงหน้ากับทุกฝ่ายที่เกี่ยวข้อง อย่างน้อยมันก็เป็นประเด็นทางการเมืองเท่ากับด้านเทคนิค

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

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

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


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

@blizpasta ขึ้นอยู่กับจำนวนลูกค้าที่มีปัญหาเกี่ยวกับ API หากคุณมีครึ่งโหลทั้งหมดนี้อยู่ในแผนกเดียวกันอาจต้องใช้เวลาในการสนทนาและการโต้เถียงและใช้เวลาสองสามเดือนในการเปลี่ยนผ่านภายใต้สถานการณ์ปกติ หากคุณมีผู้ใช้หลายล้านคนและมีรหัสลูกค้า LOC นับพันล้านทั่วโลกใช่แล้วคุณจะไม่ลบวิธีที่เลิกใช้แล้วไป
PéterTörök

5

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


2
เมื่อฉันทำสิ่งนี้ฉันมักจะสามารถเปลี่ยนรหัสเก่าเพื่อเรียกรหัสใหม่ สิ่งนี้ทำให้มันกลายเป็นวิธีสตับและให้โค้ดที่ได้รับการปรับปรุง (หวังว่า) สำหรับลูกค้าของวิธีเก่า
BillThor

4

โปรดทราบว่านี่เป็นหนึ่งในเหตุผลหลักที่มีเซิร์ฟเวอร์บิลด์ซึ่งรันการทดสอบ

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

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