2010-07-19 12 views
14

मैं समझता हूं कि InternalVisibleTo विशेषता का उपयोग किसी निर्दिष्ट असेंबली में आंतरिक पहुंच संशोधक के साथ प्रकारों और विधियों का खुलासा करने के लिए किया जाता है। मैंने कभी भी यूनिट परीक्षणों के सूट वाले एक अलग असेंबली में आंतरिक विधियों को उजागर करने के लिए इसका उपयोग किया है।कब [असेंबली: InternalsVisibleTo()] का उपयोग किया जाना चाहिए?

जब मैं इसका उपयोग किया जाना चाहिए तो मैं एक और परिदृश्य के बारे में सोचने के लिए संघर्ष कर रहा हूं। क्या यह विशेषता विशेष रूप से यूनिट परीक्षण की सहायता के लिए पेश की गई थी या क्या कोई अन्य कारण था?

उत्तर

14

एक परिदृश्य यह हो सकता है कि आपके पास असेंबली (जैसे आंतरिक डेटा ऑब्जेक्ट्स और लॉजिक लेयर) के बीच तर्क का अलगाव हो। आप अपने उपयोगकर्ताओं को कक्षाओं का पर्दाफाश नहीं करना चाहते हैं, लेकिन आप अभी भी अपनी असेंबली में वस्तुओं का उपयोग करना चाहते हैं।

मुझे लगता है कि यह एक बहुत ही सामान्य परिदृश्य नहीं है, मैं कभी भी गैर यूनिट परीक्षण संदर्भ में InternalsVisibleTo का उपयोग नहीं करता हूं।

+1

मैं सहमत हूं। मैं केवल यूनिट परीक्षण परिदृश्य में इसका उपयोग करता हूं, लेकिन आपके द्वारा वर्णित परिदृश्य एक उचित है। – Steven

6

परीक्षण के अलावा, एकमात्र अन्य परिदृश्य मैंने कभी भी InternalsVisibleTo विशेषता का उपयोग किया है, जब धारावाहिक असेंबली बना रही थी।

इसके अलावा, मैंने कभी भी इसका उपयोग नहीं किया है, न ही इसकी आवश्यकता है।

7

यह परिदृश्य Elisha's के समान है, लेकिन Domain-driven design में आपके डोमेन मॉडल के सही उपयोग को लागू करने के लिए लक्षित है।

मान लें कि आपके पास एक असेंबली MyProject.Core है, जिसमें आपके सभी डोमेन मॉडल शामिल हैं। यदि आप नहीं चाहते हैं कि अन्य लोग सीधे आपके डोमेन मॉडल के उदाहरण बनाते हैं, तो आप कन्स्ट्रक्टर internal बना सकते हैं।

MyProject.Services नामक एक अन्य असेंबली में डोमेन सेवाएं शामिल हैं जो वैध डोमेन ऑब्जेक्ट्स बनाने में विशिष्ट हैं। इस असेंबली में MyProject.Core का संदर्भ होगा। InternalsVisibleTo विशेषता डोमेन सेवा असेंबली को internal रचनाकारों तक पहुंच प्रदान करने के लिए उपयोग की जाती है।

MyProject.Services से MyProject.Core के संदर्भ का एक अन्य लाभ यह है कि यह डोमेन सेवाओं को किसी भी संदर्भ को रखने के लिए डोमेन ऑब्जेक्ट्स को अस्वीकार करता है, जिसे एक और अच्छा डीडीडी अभ्यास माना जाता है।

नोट: मैं व्यवहार में उपरोक्त परिदृश्य लागू किया कभी नहीं किया है, तो यह DDD स्तर पर पूरी तरह से सही नहीं हो सकता। लेकिन यह InternalsVisibleTo का उपयोग है जिसे मैं सोच सकता हूं, यह इकाई परीक्षण से संबंधित नहीं है।

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