मैं कुछ सुझाव सुझाता हूँ। उनमें से कुछ एक-दूसरे का खंडन करते हैं। लेकिन शायद कुछ उपयोगी हैं।
सूचियों बनाम झंडे पर विचार करें
आप दुनिया भर में पुनरावृत्ति कर सकते हैं और प्रत्येक आइटम पर एक ध्वज की जांच कर सकते हैं ताकि यह तय किया जा सके कि झंडा-चीज़ क्या करना है। या आप केवल उन वस्तुओं की एक सूची रख सकते हैं जिन्हें ध्वज-वस्तु करना चाहिए।
सूचियों और गणना पर विचार करें
आप अपने आइटम वर्ग, isAThis और isAThat में बूलियन फ़ील्ड जोड़ सकते हैं। या आपके पास स्ट्रिंग्स या एनम तत्वों की सूची हो सकती है, जैसे {"isAThis", "isAThat"} या {IS_A_THIS, IS_A_THAT}। इस तरह से आप फ़ील्ड्स को जोड़े बिना एन्यूमरेशन (या स्ट्रिंग कॉन्स्ट) में नए जोड़ सकते हैं। ऐसा नहीं है कि खेतों को जोड़ने के साथ वास्तव में कुछ भी गलत है ...
फ़ंक्शन पॉइंटर्स पर विचार करें
झंडे या एनम की सूची के बजाय, विभिन्न संदर्भों में उस आइटम को निष्पादित करने के लिए कार्यों की एक सूची हो सकती है। (इकाई-इश ...)
वस्तुओं पर विचार करें
कुछ लोग डेटा-चालित, या स्क्रिप्टेड, या घटक निकाय दृष्टिकोण पसंद करते हैं। लेकिन पुराने जमाने की वस्तुएं पदानुक्रम भी विचार करने लायक हैं। आधार वर्ग को क्रियाओं को स्वीकार करने की आवश्यकता है, जैसे "टर्न-फेज बी के लिए यह कार्ड खेलें" या जो भी हो। तब प्रत्येक प्रकार का कार्ड ओवरराइड कर सकता है और उचित प्रतिक्रिया दे सकता है। वहाँ शायद एक खिलाड़ी वस्तु और खेल वस्तु के रूप में अच्छी तरह से है, तो खेल की तरह चीजें कर सकते हैं, अगर (खिलाड़ी- isAllowedToPlay ()) {नाटक करें…}।
डिबग-क्षमता पर विचार करें
झंडे के खेतों के ढेर के बारे में एक बार अच्छी बात यह है कि आप उसी तरह हर वस्तु की स्थिति की जांच कर सकते हैं और उसका प्रिंट आउट ले सकते हैं। यदि राज्य को विभिन्न प्रकारों, या घटकों के बैग, या फ़ंक्शन पॉइंटर्स या अलग-अलग सूचियों में दर्शाया जाता है, तो यह केवल आइटम के क्षेत्रों को देखने के लिए पर्याप्त नहीं हो सकता है। यह सब व्यापार है।
आखिरकार, रिफैक्टिंग: इकाई परीक्षणों पर विचार करें
कोई फर्क नहीं पड़ता कि आप अपनी वास्तुकला को कितना सामान्य करते हैं, आप उन चीजों की कल्पना करने में सक्षम होंगे जो इसे कवर नहीं करती हैं। फिर आपको रिफलेक्टर करना होगा। शायद थोड़ा, शायद बहुत।
इस सुरक्षित बनाने का एक तरीका इकाई परीक्षणों के एक निकाय के साथ है। इस तरह आप आश्वस्त हो सकते हैं कि भले ही आपने चीजों को फिर से व्यवस्थित किया हो (शायद बहुत से!) मौजूदा कार्यक्षमता अभी भी काम करती है। प्रत्येक इकाई परीक्षण आम तौर पर इस तरह दिखता है:
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
}
जैसा कि आप देख सकते हैं, खेल (या खिलाड़ी, कार्ड, और ग) पर उन शीर्ष-स्तरीय एपीआई कॉल को स्थिर रखना इकाई परीक्षण रणनीति की कुंजी है।