एफ # "हस्ताक्षर फ़ाइलें" कहा जाता है एक छोटे से इस्तेमाल किया सुविधा है। आप सार्वजनिक प्रकार/तरीकों/मॉड्यूल/कार्य से भरा एक बड़ा कार्यान्वयन फ़ाइल हो सकता है, लेकिन फिर आप छिपाने और चुनिंदा कि कार्यक्षमता का खुलासा एक हस्ताक्षर फ़ाइल के माध्यम से कार्यक्रम की अगली कड़ी के लिए कर सकते हैं। यही कारण है कि एक हस्ताक्षर फ़ाइल स्क्रीन का एक प्रकार/फिल्टर है कि आप संस्थाओं लेकिन "कार्यक्रम के आराम करने के लिए निजी" "इस फ़ाइल की सार्वजनिक" बनाने के लिए सक्षम बनाता है के रूप में कार्य करता है। क्योंकि आप कैप्सूलीकरण इस तरह के लिए है ही अन्य/पूर्व उपकरण विधानसभाओं है
मैं इस तरह लग रहा है, नेट मंच पर एक सुंदर हत्यारा सुविधा है। आप कुछ ही संबंधित प्रकार है कि एक दूसरे के आंतरिक विवरण देखने के लिए सक्षम होना चाहते हैं के साथ एक छोटे घटक है, लेकिन उन प्रकार के उन सभी बिट्स हर किसी सार्वजनिक नहीं करना चाहते, तो आप क्या कर सकते हैं?ठीक है, तुम दोनों कर सकते हैं:
- आप एक अलग विधानसभा में कि घटक डाल सकते हैं, और सदस्यों को बताया कि उन प्रकार के शेयर "आंतरिक" हो बनाने के लिए, और संकीर्ण हिस्सा आप हर किसी की हो देखने के लिए "चाहते हैं सार्वजनिक ", या
- आप आंतरिक सामग्री को" आंतरिक "चिह्नित करते हैं लेकिन आप उन प्रकारों को अपनी विशाल असेंबली में छोड़ देते हैं और उम्मीद करते हैं कि असेंबली में मौजूद सभी अन्य कोड उन सदस्यों को कॉल न करने का विकल्प चुनते हैं जिन्हें केवल 'आंतरिक' चिह्नित किया गया था क्योंकि इसे देखने के लिए एक अन्य प्रकार की आवश्यकता है।
मेरे अनुभव में, बड़ी सॉफ्टवेयर परियोजनाओं पर, हर कोई हमेशा # 2 करता है, क्योंकि # 1 विभिन्न कारणों से गैर स्टार्टर है (लोग 50 छोटी असेंबली नहीं चाहते हैं, वे 1 या 2 या 3 बड़े चाहते हैं असेंबली, अन्य संभव कारणों के लिए जो encapsulation बिंदु से संबंधित नहीं है, मैं उठा रहा हूं (एक तरफ: हर कोई ILMerge का उल्लेख करता है लेकिन कोई भी इसका उपयोग नहीं करता))।
तो आपने विकल्प # 2 चुना है। फिर एक साल बाद, आप अंततः उस घटक को दोबारा करने का फैसला करते हैं, और आप पाते हैं कि पिछले वर्ष में, 17 अन्य स्थानों ने अब उस 'आंतरिक' विधि में बुलाया था जो वास्तव में केवल एक अन्य प्रकार के कॉल के लिए था, इसे वास्तव में बनाना उस बिट को कारक करना मुश्किल है क्योंकि अब हर कोई उन कार्यान्वयन विवरणों पर निर्भर करता है। ओह।
बिंदु यह है कि, नेट में मध्यम आकार के अंतर-असेंबली encapsulation स्कोप/सीमा बनाने के लिए कोई अच्छा तरीका नहीं है। अक्सर "आंतरिक" बहुत बड़ा होता है और "निजी" बहुत छोटा होता है।
... एफ # तक। एफ # हस्ताक्षर फ़ाइलों के साथ, आप कार्यान्वयन फ़ाइल के भीतर सार्वजनिक रूप से सामान के समूह को चिह्नित करके "इस स्रोत कोड फ़ाइल" का एक encapsulation दायरा बना सकते हैं, इसलिए फ़ाइल में मौजूद सभी अन्य कोड इसे देख सकते हैं और उस पर पार्टी कर सकते हैं, लेकिन फिर उपयोग करें सभी विवरणों को छिपाने के लिए एक हस्ताक्षर फ़ाइल संकीर्ण सार्वजनिक इंटरफ़ेस की अपेक्षा करती है जो घटक दुनिया के बाकी हिस्सों में प्रकट होता है। यह खुश है एक फ़ाइल में तीन अत्यधिक संबंधित प्रकारों को परिभाषित करें, उन्हें एक-दूसरे के कार्यान्वयन के विवरण देखने दें, लेकिन केवल सभी को वास्तव में सार्वजनिक सामग्री का पर्दाफाश करें। जीत!
हस्ताक्षर फ़ाइलें शायद इंट्रा-विधानसभा कैप्सूलीकरण सीमाओं के लिए आदर्श सुविधा नहीं हैं, लेकिन वे केवल ऐसी सुविधा मुझे पता कर रहे हैं, और इसलिए मैं सागर में एक जीवन बेड़ा की तरह उन्हें चिपटना।
टीएल; डीआर
जटिलता दुश्मन है। Encapsulation सीमाएं इस दुश्मन के खिलाफ एक हथियार हैं। "निजी" एक महान हथियार है लेकिन कभी-कभी लागू होने के लिए बहुत छोटा होता है, और "आंतरिक" अक्सर बहुत कमजोर होता है क्योंकि इतना कोड (संपूर्ण असेंबली और सभी आंतरिक दृश्यमान) आंतरिक सामान देख सकते हैं। एफ # "एक प्रकार के लिए निजी" से बड़ा गुंजाइश प्रदान करता है लेकिन "पूरी असेंबली" से छोटा है, और यह बहुत उपयोगी है।
मुझे लगता है कि इसलिए हर सुविधा किसी भी तरह छिपी हुई है;) – wishi