ฉันจะเสนอคำแนะนำเล็กน้อย บางคนขัดแย้งกัน แต่อาจมีประโยชน์บ้าง
พิจารณารายการเทียบกับธง
คุณสามารถย้ำไปทั่วโลกและตรวจสอบการตั้งค่าสถานะในแต่ละรายการเพื่อตัดสินใจว่าจะทำสิ่งที่ธง หรือคุณสามารถเก็บรายการของไอเท็มเหล่านั้นเท่านั้นที่ควรทำสิ่งแฟล็ก
พิจารณารายการและการแจกแจง
คุณสามารถเพิ่มเขตข้อมูลบูลีนไปยังคลาสไอเท็มของคุณคืออะไรนั่นคือและอะไร หรือคุณสามารถมีรายการของสตริงหรือองค์ประกอบ enum เช่น {“ isAThis”,“ isAThat”} หรือ {IS_A_THIS, IS_A_THAT} ด้วยวิธีนี้คุณสามารถเพิ่มอันใหม่ในการแจงนับ (หรือ const const) โดยไม่ต้องเพิ่มฟิลด์ ไม่ใช่ว่ามีอะไรผิดปกติกับการเพิ่มเขตข้อมูล ...
พิจารณาพอยน์เตอร์ของฟังก์ชัน
แทนที่จะเป็นรายการของแฟล็กหรือ enums สามารถมีรายการของการดำเนินการเพื่อดำเนินการสำหรับรายการนั้นในบริบทที่แตกต่างกัน (Entity-ish ... )
พิจารณาวัตถุ
บางคนชอบวิธีที่ขับเคลื่อนด้วยข้อมูลหรือใช้สคริปต์หรือส่วนประกอบเอนทิตี แต่ลำดับชั้นวัตถุแบบเก่าก็มีค่าควรพิจารณาเช่นกัน คลาสพื้นฐานจำเป็นต้องยอมรับการกระทำเช่น“ เล่นการ์ดนี้สำหรับเทิร์นเฟส B” หรืออะไรก็ตาม จากนั้นการ์ดแต่ละประเภทสามารถแทนที่และตอบสนองตามความเหมาะสม อาจมีวัตถุผู้เล่นและวัตถุเกมด้วยเช่นกันดังนั้นเกมสามารถทำสิ่งต่าง ๆ เช่นถ้า (player-> isAllowedToPlay ()) {เล่น ...
พิจารณาความสามารถในการดีบัก
เมื่อสิ่งที่ดีเกี่ยวกับกองเขตข้อมูลธงคือคุณสามารถตรวจสอบและพิมพ์สถานะของทุกรายการในลักษณะเดียวกัน หากสถานะถูกแสดงด้วยชนิดต่าง ๆ หรือส่วนประกอบของถุงหรือพอยน์เตอร์ของฟังก์ชันหรืออยู่ในรายการที่แตกต่างกันอาจไม่เพียงพอที่จะดูที่ฟิลด์ของรายการ มันคือการแลกเปลี่ยนทั้งหมด
ในที่สุดการปรับโครงสร้างใหม่: พิจารณาการทดสอบหน่วย
ไม่ว่าคุณจะพูดคุยกับสถาปัตยกรรมของคุณมากแค่ไหนคุณก็สามารถจินตนาการถึงสิ่งที่มันไม่ครอบคลุม แล้วคุณจะต้อง refactor อาจจะเล็กน้อยหรืออาจจะมาก
วิธีที่จะทำให้ปลอดภัยยิ่งขึ้นนี้คือร่างกายของการทดสอบหน่วย ด้วยวิธีนี้คุณสามารถมั่นใจได้ว่าแม้ว่าคุณจะจัดเรียงสิ่งต่าง ๆ ภายใต้ (อาจจะมาก!) การทำงานที่มีอยู่ยังคงใช้งานได้ การทดสอบแต่ละหน่วยโดยทั่วไปจะเป็นดังนี้:
void test1()
{
Game game;
game.addThis();
game.setupThat(); // use primary or backdoor API to get game to known state
game.playCard(something something).
int x = game.getSomeInternalState;
assertEquals(“did it do what we wanted?”, x, 23); // fail if x isn’t 23
}
อย่างที่คุณเห็นการทำให้การเรียก API ระดับบนสุดของเกม (หรือเครื่องเล่น, การ์ด, & c) มีความเสถียรเป็นกุญแจสำคัญในกลยุทธ์การทดสอบหน่วย