2011-06-08 10 views
5

अक्सर यह पढ़ता है कि कैसे आपके कोड को डिज़ाइन करने की आवश्यकता से बचने के लिए आपके कोड को डिजाइन करने के लायक है, और खुद को कैसे डालने की आवश्यकता है, यह सुझाव दे सकता है कि एक बेहतर कार्यान्वयन उपलब्ध है। मैं आभासी विश्व इंजन के कार्यान्वयन में "कास्ट-फ्री कोड" के इस पवित्र अंगूर को प्राप्त करने की कोशिश कर रहा हूं, जहां कई वस्तुओं में विभिन्न प्रकार के इंटरफेस होते हैं, जो मध्यस्थों और डेटा (और कभी-कभी दोनों के रूप में) कई अलग-अलग रूपों के रूप में कार्य करते हैं। । जैसा कि एक समान प्रश्न में एक उत्तर है (Linkage), लक्ष्य हमेशा उम्मीदवार वस्तुओं की एक बड़ी श्रृंखला से बाहर निकलने की कोशिश करने के बजाय आवश्यक स्थान पर सही प्रकार का संदर्भ/सूचक होना है।गतिशील जानवरों से बचने के लिए आर्किटेक्चरल रणनीतियों

इस बड़े मुद्दे के प्रबंधन में मेरे नवीनतम स्टैब में उनके मध्यस्थों के साथ ऑब्जेक्ट्स का पंजीकरण शामिल है, जिसमें नियंत्रण की ग्रैन्युलरिटी के मामले में कुछ अच्छे फायदे हैं (आप मध्यस्थों और उनके लक्ष्यों के बीच कई मैपिंग्स को रनटाइम कर सकते हैं)।

कुछ समस्याएं भी हैं ... इस समय मैं सबसे बड़ी देख रहा हूं कि मध्यस्थों से लक्ष्य का पंजीकरण रद्द हो गया है। प्रत्येक संभावित मध्यस्थ को मतदान किए बिना क्या उपयोग कर रहा है इसका ट्रैक रखने के लिए कार्यक्रम को अभी तक कौन से लिंक बनाए गए हैं, इस बारे में अधिक डेटा स्टोर करने की आवश्यकता है। एक तरफ मध्यस्थों के लिए यह पता लगाना संभव होगा कि उनके लक्ष्य समाप्त हो गए हैं या नहीं (मैं स्मार्ट पॉइंटर्स और सबकुछ के लिए कमजोर पॉइंटर्स का उपयोग कर रहा हूं, इसलिए यह मुश्किल नहीं है), हालांकि यह केवल वस्तुओं की समाप्ति को संभालने में काम करता है और करता है व्यवहार की सार्थक पुनर्गठन के लिए एक ढांचा स्थापित नहीं करें।

जब दूर से देखा जाता है, तो यह समय और स्मृति के बीच व्यापार-बंद होने के लिए उबाऊ सॉफ़्टवेयर का एक और मामला है। कम गणना करने के लिए अधिक डेटा स्टोर करें।

मैं पूछना चाहता हूं कि गतिशील जानवरों से बचने के लिए कार्यक्रमों के निर्माण के बारे में आपके विचार क्या हैं, और यदि आप इन परिस्थितियों में प्रभावी रणनीतियों/पैटर्न साझा कर सकते हैं।

+0

मुझे यकीन नहीं है कि आपके परिदृश्य का विवरण प्रश्न के साथ क्या करना है? –

उत्तर

3

यह एक मौलिक रूप से दोषपूर्ण प्रस्ताव है। dynamic_cast किसी कारण से मौजूद है। कास्ट-कम कोड का लक्ष्य रखने का प्रयास करना सिर्फ बेवकूफ है - एक उद्देश्य प्रदान करता है। निश्चित रूप से, जहां भी आप कर सकते हैं उन्हें कम करने के लिए यह सबसे अच्छी बात हो सकती है, लेकिन यह उन पर प्रतिबंध लगाने की कोशिश से बहुत अलग है। dynamic_cast के बिना कोड किसी प्रकार का पवित्र अंगूर नहीं है - या तो इसे इसकी आवश्यकता नहीं है, इस स्थिति में यह केवल कोड है, या इसकी आवश्यकता है, इस मामले में यह उप-कोड कोड है।

हालांकि, थोड़ा और विषय पर रहने के लिए, मुझे व्यक्तिगत रूप से पता चलता है कि यह प्लेग की तरह विरासत फैलाने से नहीं है और मैं एपोकैलीज का कारण बन रहा हूं, तो कास्टिंग की आवश्यकता सीमित है- टेम्पलेट्स एक हैं यहाँ चमत्कार

+0

अच्छे अंक। यह सच है कि कुछ (यदि कोई हैं) विकास में पूर्ण नियम हैं। ऐसा लगता है कि जितना अधिक आप विरासत को अधिक बहुमुखी प्रतिभा प्राप्त करते हैं, लेकिन निश्चित रूप से अधिक जटिलता के साथ। – EdF

संबंधित मुद्दे