रजिस्ट्री

बुनियादी चीज़ों से शुरू करते हुए, यहां रजिस्ट्री की अनौपचारिक परिभाषा दी गई है:

लेकिन:

हालांकि, इस क्लास के साथ बेहतर तरीके से काम करने के लिए, इस क्लास को समझना आपके लिए मददगार हो सकता है.

कीसेट हैंडल पर getPrimitive() को कॉल करने पर क्या होता है? यह आपके कॉल को रजिस्ट्री1 पर फ़ॉरवर्ड करता है, जिसमें कुंजियां बनाने के सटीक तरीकों वाले ऑब्जेक्ट और प्रिमिटिव बनाए जाते हैं, जैसे कि AesGcm कुंजी या ChinkedMac इंस्टेंस. रजिस्ट्री का काम कॉल को सही ऑब्जेक्ट पर भेजना है. यह सुविधा सिर्फ़ तब काम करती है, जब ऑब्जेक्ट रजिस्टर हो. इसलिए, यह ज़रूरी है कि आप इस्तेमाल किए जाने वाले प्रीमिटिव को हमेशा रजिस्टर करें.

हालांकि, अगर मैं किसी ऐसी लाइब्रेरी का इस्तेमाल करूं जिसमें मेरी ज़रूरत के मुताबिक बहुत सारे प्रिमिटिव हों, तो क्या होगा?

असल में यही समस्या है. रजिस्ट्री को हटाए जाने की एक वजह यह भी है. क्योंकि इस मामले में आपका कोड सिर्फ़ तब तक काम करता है, जब तक लाइब्रेरी के लेखक उस प्रिमिटिव को रजिस्टर न करने का फ़ैसला लेते हैं. यहां पर आपका कोड ब्रेक हो जाता है और वजह साफ़ तौर पर पता नहीं चलता है और भ्रम की स्थिति पैदा होती है. इसलिए, आप जो भी इस्तेमाल करें उसे हमेशा रजिस्टर करें. उदाहरण के लिए, अगर आपको अपने Java कोड में MAC का इस्तेमाल करना है, तो सेटअप के दौरान ये काम करें:

MacConfig.register()

यह कोड पक्का करता है कि MAC प्रिमिटिव का इस्तेमाल करने के लिए, सभी ज़रूरी ऑब्जेक्ट ज़रूरी जगहों पर रजिस्टर किए गए हैं.

इस समस्या का एक और हिस्सा भी है. आपकी कुछ डिपेंडेंसी ऐसी चीज़ें हो सकती हैं, जिनकी आपको ज़रूरत नहीं है और जिन पर निर्भर नहीं रहना है. ग्लोबल रजिस्ट्री को हटाने की यह एक और वजह है.


  1. तो सटीक रहें. हम क्लास और सिंगलटन, दोनों के लिए "रजिस्ट्री" नाम का इस्तेमाल एक-दूसरे की जगह पर करते हैं.