จากนั้นก็มีไฟเขียวและในความพยายามที่จะทำความสะอาดบางสิ่งบางคนเขียน GameManager อาจเป็นไปได้ที่จะจับ GameStates ไว้มากมายอาจจะเก็บ GameObjects ไว้สองสามอันไม่มีอะไรใหญ่โตจริงๆ ผู้จัดการเล็ก ๆ น้อย ๆ ที่น่ารัก
คุณรู้ไหมว่าขณะที่ฉันอ่านข้อความนี้ฉันมีสัญญาณเตือนเล็กน้อยที่จะหายไปในหัวของฉัน วัตถุที่มีชื่อว่า "GameManager" นั้นจะไม่น่ารักหรือน้อย มีคนทำเช่นนี้เพื่อล้างรหัสหรือไม่ มันมีลักษณะอย่างไรก่อนหน้านี้? ตกลงมุขกัน: ชื่อของคลาสควรบ่งบอกอย่างชัดเจนว่าคลาสทำอะไรและนี่ควรเป็นสิ่งหนึ่ง (aka: หลักการความรับผิดชอบเดี่ยว )
นอกจากนี้คุณยังอาจพบวัตถุเช่น GameManager แต่ชัดเจนว่ามีอยู่ในระดับที่สูงมากและควรเกี่ยวข้องกับงานระดับสูง การบำรุงรักษาแคตตาล็อกของวัตถุในเกม? บางที. อำนวยความสะดวกในการสื่อสารระหว่างวัตถุในเกม? แน่ใจ คำนวณการชนระหว่างวัตถุหรือไม่ No! นี่คือเหตุผลที่ผู้จัดการชื่อขมวดคิ้ว - มันกว้างเกินไปและอนุญาตให้มีการละเมิดมากภายใต้แบนเนอร์นั้น
กฎง่ายๆเกี่ยวกับขนาดของคลาส: หากคุณใช้โค้ดหลายร้อยบรรทัดต่อคลาสสิ่งหนึ่งเริ่มที่จะผิดไป ไม่มีอะไรจะพูดมากกว่า 300 LOC เป็นรหัสกลิ่นสำหรับฉันและถ้าคุณไปมากกว่า 1,000 ระฆังเตือนควรจะดับ ด้วยการเชื่อว่ารหัส 1000 บรรทัดนั้นง่ายต่อการเข้าใจมากกว่า 4 คลาสที่มีโครงสร้างอย่างละ 250 คลาสคุณจะหลอกตัวเอง
เมื่อเวลากลายเป็นปัญหาไม่มีวิธีการเขียนชั้นแยกต่างหากหรือแยกผู้จัดการยักษ์รายนี้เป็นผู้จัดการย่อย
ฉันคิดว่าเป็นกรณีนี้เพียงเพราะปัญหาอนุญาตให้เผยแพร่ไปยังจุดที่ทุกอย่างยุ่งเหยิงสมบูรณ์ การปฏิบัติของrefactoringคือจริงๆสิ่งที่คุณกำลังมองหา - คุณจำเป็นต้องปรับปรุงอย่างต่อเนื่องการออกแบบของรหัสในการเพิ่มขึ้นเล็ก ๆ
คุณอยากแนะนำอะไรให้ป้องกันไม่ให้สิ่งนี้เกิดขึ้น
ปัญหาไม่ใช่ปัญหาทางเทคโนโลยีดังนั้นคุณไม่ควรมองหาวิธีแก้ไขทางเทคโนโลยี ปัญหาคือสิ่งนี้: มีแนวโน้มที่ทีมของคุณจะสร้างโค้ดแบบเสาหินและความเชื่อที่ว่ามันเป็นประโยชน์ในระยะกลาง / ระยะยาวในการทำงานเช่นนี้ นอกจากนี้ดูเหมือนว่าทีมจะขาดผู้นำทางสถาปัตยกรรมที่แข็งแกร่งซึ่งจะเป็นผู้แนะนำสถาปัตยกรรมของเกม (หรืออย่างน้อยบุคคลนี้ยุ่งเกินไปที่จะทำงานนี้) โดยพื้นฐานแล้วทางออกเดียวคือให้สมาชิกในทีมรับรู้ว่าการคิดนี้ผิด มันไม่มีใครโปรดปราน คุณภาพของผลิตภัณฑ์จะแย่ลงและทีมจะใช้เวลาในการแก้ไขปัญหามากขึ้น
ข่าวดีก็คือว่าผลประโยชน์ที่จับต้องได้ทันทีของการเขียนโค้ดสะอาดนั้นยอดเยี่ยมมากและผู้พัฒนาเกือบทุกรายจะได้รับประโยชน์อย่างรวดเร็ว โน้มน้าวให้ทีมทำงานด้วยวิธีนี้สักพักผลที่เหลือจะทำ
ส่วนที่ยากคือการพัฒนาความรู้สึกในสิ่งที่ถือเป็นรหัสที่ไม่ดี (และความสามารถสำหรับการออกแบบที่ดีขึ้นอย่างรวดเร็ว) เป็นหนึ่งในทักษะที่ยากยิ่งที่จะเรียนรู้ในการพัฒนา ข้อเสนอแนะของฉันขึ้นอยู่กับความหวังว่าคุณมีคนอาวุโสในทีมที่สามารถทำสิ่งนี้ได้ - มันง่ายกว่ามากในการโน้มน้าวผู้คนในแบบนั้น
แก้ไข - ข้อมูลเพิ่มเติมอีกเล็กน้อย:
โดยทั่วไปฉันไม่คิดว่าปัญหาของคุณ จำกัด อยู่ที่การพัฒนาเกม หลักของมันคือปัญหาวิศวกรรมซอฟต์แวร์ดังนั้นความเห็นของฉันในทิศทางนั้น สิ่งที่อาจแตกต่างกันคือลักษณะของอุตสาหกรรมการพัฒนาเกมไม่ว่าจะเป็นผลลัพธ์และกำหนดเวลาที่มุ่งเน้นมากกว่าการพัฒนาประเภทอื่น ๆ ผมไม่แน่ใจ
โดยเฉพาะสำหรับการพัฒนาเกม แต่คำตอบที่ได้รับการยอมรับสำหรับคำถามนี้เกี่ยวกับ StackOverflow เกี่ยวกับเคล็ดลับ "โดยเฉพาะอย่างยิ่งสถาปัตยกรรมเกม" กล่าวว่า:
ปฏิบัติตามหลักการของการออกแบบเชิงวัตถุ ....
นี่คือสิ่งที่ฉันกำลังพูด เมื่อฉันตกอยู่ในภาวะกดดันฉันก็พบว่าตัวเองกำลังเขียนโค้ดขนาดใหญ่ แต่ฉันได้เจาะมันลงไปในหัวของฉันนั่นคือหนี้ทางเทคนิค สิ่งที่มีแนวโน้มที่จะทำงานได้ดีสำหรับฉันคือใช้เวลาครึ่งแรก (หรือสามในสี่) ของวันที่ผลิตรหัสคุณภาพปานกลางจำนวนมากจากนั้นจึงนั่งลงและคิดทบทวนสักพักหนึ่ง ทำบิตของการออกแบบในหัวของฉันหรือบนกระดาษ / ไวท์บอร์ดเกี่ยวกับวิธีการปรับปรุงรหัสเล็กน้อย บ่อยครั้งที่ฉันสังเกตเห็นรหัสซ้ำ ๆ และสามารถลดจำนวนบรรทัดของรหัสโดยแบ่งสิ่งต่าง ๆ ออกมาทั้งหมดในขณะที่ปรับปรุงความสามารถในการอ่าน เวลานี้การลงทุนจ่ายให้กับตัวเองอย่างรวดเร็วการเรียกมันว่า "การลงทุน" ฟังดูงี่เง่า - บ่อยครั้งที่ฉันจะรับบั๊กที่อาจเสียเวลาครึ่งวันของฉัน (หนึ่งสัปดาห์ต่อมา) ถ้าฉันอนุญาต
- แก้ไขสิ่งต่าง ๆ ในวันเดียวกันกับที่คุณใช้รหัส
- คุณจะดีใจที่คุณทำภายในไม่กี่ชั่วโมง
การเชื่อในความจริงข้างต้นนั้นเป็นเรื่องยาก ฉันพยายามที่จะทำเพื่องานของตัวเองเท่านั้นเพราะฉันได้รับผลกระทบซ้ำแล้วซ้ำอีก ถึงกระนั้นมันก็ยังคงเป็นเรื่องยากสำหรับฉันที่จะปรับแก้รหัสเมื่อฉันสามารถทำให้เสียมากกว่านี้ ... ดังนั้นฉันจึงเข้าใจว่าคุณมาจากไหน น่าเสียดายที่คำแนะนำนี้อาจกว้างเกินไปและไม่ง่ายที่จะทำ ฉันเชื่อมั่นในมันอย่างไรก็ตาม! :)
ในการตอบตัวอย่างเฉพาะของคุณ:
Clean Codeของลุงบ็อบทำหน้าที่ได้อย่างยอดเยี่ยมในการสรุปว่ารหัสคุณภาพดีเป็นอย่างไร ฉันบังเอิญเห็นด้วยกับเนื้อหาเกือบทั้งหมด ดังนั้นเมื่อฉันคิดถึงตัวอย่างของคลาสผู้จัดการ 30,000 LOC ของคุณฉันไม่เห็นด้วยกับส่วน "เหตุผลที่ดี" จริงๆ ฉันไม่ต้องการที่จะฟังดูน่ารังเกียจ แต่การคิดแบบนั้นจะนำไปสู่ปัญหา ไม่มีเหตุผลที่ดีสำหรับการมีรหัสมากในไฟล์เดียว - มันเป็นข้อความเกือบ 1,000 หน้า! ผลประโยชน์ใด ๆ ของท้องถิ่น (ความเร็วในการเรียกใช้งานหรือการออกแบบ "ความเรียบง่าย") จะถูกยกเลิกทันทีโดยนักพัฒนาที่ถูกจมลงอย่างสมบูรณ์พยายามที่จะควบคุมความผิดพลาดนั้นและนั่นคือก่อนที่เราจะพูดถึงการผสาน
หากคุณไม่มั่นใจคำแนะนำที่ดีที่สุดของฉันคือการหยิบหนังสือข้างต้นมาและลองดู การใช้การคิดแบบนั้นเพื่อนำไปสู่ผู้คนโดยสมัครใจสร้างโค้ดที่สะอาดและสามารถอธิบายตัวเองได้ซึ่งเป็นโครงสร้างที่สวยงาม