2014-05-02 10 views
5

आरएआईआई (संसाधन अधिग्रहण प्रारंभ है) वस्तुओं का निर्माण करने के सुझाए गए तरीकों में से एक है। यह यूनिट परीक्षण सिद्धांतों से कैसे संबंधित है जो कह रहे हैं: कन्स्ट्रक्टर में कोई जटिल काम नहीं किया गया है? और विशेष रूप से "नए" ऑपरेटर द्वारा वस्तुओं का कोई स्पष्ट निर्माण नहीं? हालांकि कुछ वस्तुओं के निर्माण के लिए कभी-कभी कुछ और जटिल कदमों की आवश्यकता होती है, और एक निर्माता को कारखाने से गुजरने के लिए एपीआई "लचीलापन" को कम करने के अर्थ में "गंदे" बनाता है। एक ही समय में दोनों सिद्धांतों को पूरा करने के सामान्य तरीके क्या हैं?आरएआईआई और यूनिट परीक्षण सिद्धांत

मुझे SO: Stack allocated RAII objects vs DI principle पर अन्य विषय मिला है, हालांकि यह एक और सामान्य समस्या की तरह दिखता है और यह अच्छी तरह से समझाया नहीं गया है।

+0

@MartinJames क्यों? यह मेरे लिए एक वैध सॉफ्टवेयर डिजाइन सवाल की तरह लगता है। इसके अलावा, मैं किसी भी वर्ग के बारे में नहीं सोच सकता जो इसे होमवर्क के रूप में पूछेगा। –

+0

यदि यह एक असाइनमेंट प्रश्न है तो मैं वहां अध्ययन करना चाहता हूं! हालांकि यह एक मुद्दा है कि मैं हर दिन काम में मिलते हैं। मैं अन्य डेवलपर्स को संभालने के विचारों और तरीकों से मिलना चाहता हूं। – thatsme

उत्तर

3

हां, एक कन्स्ट्रक्टर में एक ठोस वर्ग बनाने से कक्षा को जटिलता मिलती है, कक्षा में निर्भरता जोड़ती है, और परीक्षण करना कठिन हो जाता है।

लेकिन, आरएआईआई वस्तुओं का निर्माण करने का एक तरीका नहीं है, बल्कि संसाधनों को जारी करने का एक तरीका नहीं है। जिस वर्ग का विनाशक संसाधन को जारी करता है उसे वस्तु का निर्माण नहीं करना पड़ता है, हालांकि यह आमतौर पर करता है: What is meant by Resource Acquisition is Initialization (RAII)? देखें।

तो, कक्षा के बाहर संसाधन बनाएं जो इसका उपयोग करता है, यदि आप चाहते हैं तो ऐसा करने के लिए कारखाने का उपयोग करें, लेकिन फिर कक्षा का उपयोग करने वाले वर्ग को आरएआईआई के साथ साफ करें।

+0

असल में कुछ पल में मैंने खेद व्यक्त किया है मैंने इस सवाल से पूछा कि इस तरह के व्यवहार का सही उदाहरण share_ptr है। – thatsme

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