เค้าโครงโครงการขนาดใหญ่: การเพิ่มคุณสมบัติใหม่ในโครงการย่อยหลายโครงการ


13

ฉันต้องการทราบวิธีการจัดการโครงการขนาดใหญ่ที่มีส่วนประกอบจำนวนมากพร้อมระบบการจัดการการควบคุมเวอร์ชัน

ในโครงการปัจจุบันของฉันมี 4 ส่วนหลัก

  1. เว็บ
  2. เซิร์ฟเวอร์
  3. คอนโซลผู้ดูแลระบบ
  4. เวที

ส่วนของเว็บและเซิร์ฟเวอร์ใช้ 2 ไลบรารีที่ฉันเขียน โดยรวมมีที่เก็บ 5 git และที่เก็บข้อมูล 1 แห่ง สคริปต์บิลด์โปรเจ็กต์อยู่ในที่เก็บแพล็ตฟอร์ม มันทำให้กระบวนการสร้างทั้งหมดเป็นไปโดยอัตโนมัติ

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

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


คุณสามารถจัดเรียงฟังก์ชันการทำงานของคุณให้มากที่สุดเท่าที่จะทำได้ในไลบรารีที่ใช้ร่วมกัน (Ruby gems, Python Egg, Java beans ฯลฯ ) จากนั้นรวบรวมชิ้นส่วนด้วยแนวคิด "การเขียน" แต่ละองค์ประกอบออกจากไลบรารี
Narfanator

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

1
ฟังดูคล้ายกับรูปแบบ "สะพาน" คุณอาจได้แรงบันดาลใจจากสิ่งนั้น
Narfanator

ที่เก็บเดียวที่จะปกครองพวกเขาทั้งหมด
Steven A. Lowe

คำตอบ:


8

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

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


2

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

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

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

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