ฉันอยากรู้ว่ามันเหมาะสมหรือไม่ที่จะแบ่งโครงการที่ฉันทำงานในที่เก็บสองแห่งแทนที่จะเป็นหนึ่งโครงการ
จากสิ่งที่ฉันสามารถพูดได้:
- ส่วนหน้าจะถูกเขียนเป็น html + js
- แบ็กเอนด์ใน. net
- แบ็กเอนด์ไม่ได้ขึ้นอยู่กับส่วนหน้าและส่วนหน้าไม่ได้ขึ้นอยู่กับส่วนแบ็คเอนด์
- ส่วนหน้าจะใช้ API พักผ่อนหย่อนใจดำเนินการในแบ็กเอนด์
- ส่วนหน้าสามารถโฮสต์บนเซิร์ฟเวอร์ HTTP ใด ๆ คงที่
ณ ตอนนี้ที่เก็บมีโครงสร้างนี้:
ราก:
- ส่วนหน้า / *
- แบ็กเอนด์ / *
ฉันคิดว่ามันเป็นความผิดพลาดที่ทำให้โครงการทั้งสองอยู่ในที่เก็บเดียวกัน เนื่องจากโปรเจ็กต์ทั้งสองไม่มีการขึ้นต่อกันระหว่างกันดังนั้นจึงควรอยู่ในที่เก็บแต่ละรายการและหากจำเป็นต้องมีที่เก็บพาเรนต์ที่มีซับโดเลชัน
ฉันได้รับแจ้งว่าไม่มีประโยชน์และเราจะไม่ได้รับประโยชน์ใด ๆ จากการทำเช่นนั้น
นี่คือข้อโต้แย้งของฉัน:
- เรามีสองโมดูลที่ไม่ได้พึ่งพากัน
- การมีประวัติแหล่งที่มาของทั้งสองโครงการในระยะยาวอาจทำให้สิ่งต่าง ๆ ซับซ้อน (ลองค้นหาในประวัติของบางสิ่งในส่วนหน้าในขณะที่คุณมีครึ่งหนึ่งของข้อผูกพันที่ไม่เกี่ยวข้องกับข้อบกพร่องที่คุณกำลังมองหา)
- ความขัดแย้งและการรวม (สิ่งนี้ไม่ควรเกิดขึ้น แต่การมีคนกดไปที่แบ็กเอนด์จะบังคับให้ผู้พัฒนารายอื่นดึงการเปลี่ยนแปลงด้านหลังเพื่อผลักดันการเปลี่ยนแปลงส่วนหน้า)
- นักพัฒนาซอฟต์แวร์หนึ่งรายอาจใช้งานได้เฉพาะในแบ็กเอนด์ แต่จะต้องดึงส่วนหน้าหรือวิธีอื่น ๆ เสมอ
- ในระยะยาวเมื่อถึงเวลาต้องปรับใช้ ในบางวิธีส่วนหน้าสามารถปรับใช้กับเซิร์ฟเวอร์แบบคงที่หลายตัวในขณะที่มีเซิร์ฟเวอร์ส่วนหลังหนึ่งตัว ในทุกกรณีผู้คนจะถูกบังคับให้โคลนทั้งแบ็กเอนด์ด้วยหรือเพื่อให้สคริปต์ที่กำหนดเองเพื่อผลักดันให้เซิร์ฟเวอร์ทั้งหมดส่วนหน้าเท่านั้นหรือเพื่อลบแบ็กเอนด์ ง่ายกว่าเพียงแค่กด / ดึงเฉพาะส่วนหน้าหรือส่วนหลังกว่าทั้งสองอย่างหากจำเป็นต้องใช้เพียงส่วนเดียว
- อาร์กิวเมนต์ตัวนับ (หนึ่งคนอาจทำงานกับทั้งสองโครงการ), สร้าง repo ตัวที่สามด้วย submodule และพัฒนาด้วย ประวัติแยกออกจากกันในแต่ละโมดูลและคุณสามารถสร้างแท็กที่เวอร์ชันแบ็กเอนด์ / ส่วนหน้าทำงานร่วมกันได้อย่างแท้จริง การมีส่วนหน้า / แบ็กเอนด์ร่วมกันใน repo หนึ่งไม่ได้หมายความว่าพวกเขาจะทำงานร่วมกัน มันเป็นเพียงการรวมประวัติศาสตร์ทั้งสองเป็น repo ใหญ่
- มีส่วนหน้า / แบ็กเอนด์เป็น submodules จะทำให้สิ่งต่าง ๆ ง่ายขึ้นถ้าคุณต้องการที่จะเพิ่มอิสระในโครงการ ในบางกรณีคุณไม่ต้องการให้สิทธิ์การเข้าถึงฐานข้อมูลเต็มรูปแบบ การมีโมดูลขนาดใหญ่หนึ่งโมดูลจะทำให้สิ่งต่างๆยากขึ้นหากคุณต้องการ จำกัด สิ่งที่ "บุคคลภายนอก" สามารถมองเห็น / แก้ไขได้
- การแนะนำบั๊กและแก้ไขบั๊กฉันได้แทรกบั๊กใหม่ในส่วนหน้า จากนั้นมีคนแก้ไขข้อผิดพลาดในแบ็กเอนด์ ด้วยที่เก็บเดียวการย้อนกลับก่อนที่ข้อผิดพลาดใหม่จะย้อนกลับแบ็กเอนด์ซึ่งอาจทำให้แก้ไขได้ยาก ฉันต้องโคลนแบ็กเอนด์ในโฟลเดอร์ต่าง ๆ เพื่อให้แบ็กเอนด์ทำงานได้ในขณะที่แก้ไขบั๊กในส่วนหน้า ... จากนั้นพยายามที่จะรวมสิ่งต่าง ๆ เข้าด้วยกัน ... การมีที่เก็บสองอันจะไม่เจ็บปวดเพราะการย้าย HEAD ของ repo ไม่ต้องเปลี่ยนอีก และการทดสอบแบ็กเอนด์รุ่นต่าง ๆ จะไม่เจ็บปวด
ใครบางคนสามารถให้ข้อโต้แย้งเพิ่มเติมแก่ฉันเพื่อโน้มน้าวใจพวกเขาหรืออย่างน้อยก็บอกฉันว่าทำไมมันไม่มีจุดหมาย (ซับซ้อนกว่า) เพื่อแบ่งโครงการออกเป็นสองส่วน โครงการนี้เป็นโครงการใหม่และโค้ดเบสมีอายุสองสามวันจึงไม่สามารถแก้ไขได้เร็วเกินไป