อย่างระมัดระวัง
Feature Branching เป็นตัวเลือก แต่ฉันคิดว่ามันค่อนข้างหนัก นอกจากนี้ยังทำให้การปรับเปลี่ยนง่ายลึกซึ่งสามารถนำไปสู่การฟอร์กออกทันทีของใบสมัครของคุณถ้าไม่ได้อยู่ภายใต้การควบคุม เป็นการดีที่คุณต้องการผลักดันการปรับแต่งให้ได้มากที่สุดเท่าที่จะเป็นไปได้เพื่อพยายามรักษาฐานรหัสหลักของคุณให้เป็นสามัญและทั่วไปที่สุดเท่าที่จะทำได้
นี่คือวิธีที่ฉันจะทำแม้ว่าฉันจะไม่ทราบว่ามันจะใช้กับฐานรหัสของคุณโดยไม่มีการดัดแปลงหนักและปัจจัยอีกครั้ง ฉันมีโครงการที่คล้ายกันซึ่งฟังก์ชั่นพื้นฐานเหมือนกัน แต่ลูกค้าแต่ละคนต้องการชุดคุณลักษณะที่เฉพาะเจาะจงมาก ฉันสร้างชุดของโมดูลและคอนเทนเนอร์ที่ฉันรวบรวมผ่านการกำหนดค่า (à la IoC)
จากนั้นสำหรับลูกค้าแต่ละคนฉันสร้างโครงการที่มีการกำหนดค่าโดยทั่วไปและสคริปต์การสร้างเพื่อสร้างการติดตั้งที่กำหนดค่าอย่างสมบูรณ์สำหรับไซต์ของพวกเขา บางครั้งฉันก็มีส่วนประกอบบางอย่างที่กำหนดเองสำหรับลูกค้านี้ แต่นี่เป็นของหายากและเมื่อใดก็ตามที่เป็นไปได้ฉันพยายามที่จะทำให้มันเป็นรูปแบบทั่วไปมากขึ้นและกดลงเพื่อให้โครงการอื่น ๆ สามารถใช้พวกเขาได้
ผลลัพธ์ที่ได้คือฉันได้รับระดับการปรับแต่งตามที่ฉันต้องการฉันได้รับสคริปต์การติดตั้งแบบกำหนดเองเพื่อที่ว่าเมื่อฉันไปถึงเว็บไซต์ของลูกค้าฉันดูเหมือนว่าฉันกำลัง tweeking ระบบตลอดเวลาและเป็นโบนัสที่สำคัญมากที่ฉันได้รับ เพื่อให้สามารถสร้างการทดสอบการถดถอยติดไว้โดยตรงบนบิลด์ ด้วยวิธีนี้เมื่อใดก็ตามที่ฉันได้รับข้อผิดพลาดที่เป็นลูกค้าเฉพาะฉันสามารถเขียนการทดสอบที่จะยืนยันระบบตามที่มีการใช้งานและทำให้สามารถทำ TDD แม้ในระดับนั้น
ในระยะสั้น:
- ระบบโมดูลาร์หนักที่มีโครงสร้างโครงการแบน
- สร้างโครงการสำหรับแต่ละโปรไฟล์กำหนดค่า (ลูกค้าแม้ว่าจะมีมากกว่าหนึ่งสามารถแชร์โปรไฟล์)
- รวบรวมชุดการทำงานที่จำเป็นเป็นผลิตภัณฑ์ที่แตกต่างและปฏิบัติต่อเช่นนั้น
หากทำอย่างถูกต้องชุดผลิตภัณฑ์ของคุณควรมีไฟล์การกำหนดค่าทั้งหมด แต่ไม่กี่ไฟล์
หลังจากใช้สิ่งนี้ไปซักพักผมก็ลงเอยด้วยการสร้างเมตาแพ็คเกจซึ่งรวบรวมส่วนใหญ่ที่ใช้หรือระบบที่จำเป็นเป็นหน่วยหลักและใช้เมตาแพคเกจนี้สำหรับการประกอบลูกค้า หลังจากไม่กี่ปีที่ผ่านมาฉันมีกล่องเครื่องมือขนาดใหญ่ที่ฉันสามารถรวบรวมได้อย่างรวดเร็วเพื่อสร้างโซลูชันลูกค้า ตอนนี้ฉันกำลังมองหาSpring Rooและดูว่าฉันไม่สามารถผลักดันความคิดนี้ต่อไปสักหน่อยได้หรือไม่ฉันหวังว่าวันหนึ่งฉันจะสามารถสร้างร่างของระบบที่เหมาะสมกับลูกค้าในการสัมภาษณ์ครั้งแรกของเรา ... ฉันเดาว่า การพัฒนา ;-)
หวังว่านี่จะช่วยได้
#ifdef
ทำงานสำหรับคุณ?