यह
पोका-योक डिज़ाइन के बारे में एक श्रृंखला की दूसरी पोस्ट है - जिसे
एनकैप्सुलेशन के रूप में भी जाना
जाता है ।
कई वर्ग आदिम मूल्यों पर उपभोग या विस्तार करते हैं, जैसे कि इंट, या स्ट्रिंग। जबकि इस तरह के आदिम किसी भी मंच पर मौजूद हैं, उनके उपयोग से प्रक्रियात्मक कोड हो सकता है। इसके अलावा, वे आमतौर पर इनकैप्सुलेशन का उल्लंघन करते हैं, जिससे गलत मान असाइन किए जा सकते हैं।
इस समस्या पर कई बार चर्चा हुई। वर्षों पहले,
जिमी बोगार्ड ने
समस्या की एक उत्कृष्ट
व्याख्या प्रदान की, साथ ही इसे हल करने के लिए एक गाइड भी दिया ।
ऑटोफिक्सचर के विकास के
कारण ,
कुछ समय पहले मैं भी
इस मुद्दे से प्रभावित था । वास्तव में, यह पोस्ट एक प्लेसहोल्डर है।
यह ध्यान दिया जाना चाहिए कि मेरी पोस्ट और जिमी पोस्ट दोनों दिखाते हैं कि स्ट्रिंग्स और पूर्णांक प्रकार एक ज़िप कोड या फोन नंबर जैसी अवधारणाओं को पर्याप्त रूप से संलग्न नहीं करते हैं।
- यदि ज़िप कोड को एक स्ट्रिंग द्वारा दर्शाया गया है, तो इसे null, string.Empty, "foo", बहुत लंबी स्ट्रिंग आदि के रूप में सौंपा जा सकता है। जिम्मी द्वारा लिखा गया ज़िपकोड क्लास अवधारणा को इनकैप्सुलेट करता है, यह सुनिश्चित करता है कि एक उदाहरण केवल सही मूल्य के साथ बनाया जा सकता है।
- यदि डेनिश फोन नंबर एक पूर्णांक है, तो इसे 98, 0, int.MaxValue, आदि सौंपा जा सकता है। पिछले उदाहरण से डेनिशपोननंबर वर्ग अवधारणा को घेरता है, यह सुनिश्चित करता है कि एक उदाहरण केवल सही मूल्य के साथ बनाया जा सकता है।
जब तक एक आदिम मूल्य द्वारा दर्शाई गई अवधारणा एक आदिम प्रकार के संभावित मूल्यों को ले सकती है, तब तक एनकैप्सुलेशन टूट जाता है। हालांकि, यह दुर्लभ है।
डिजाइन की "गंध"वर्ग एक आदिम प्रकार का उपभोग करता है। हालांकि, आगे के विश्लेषण से पता चलता है कि प्रकार के सभी संभावित मूल्य मान्य नहीं हैं।
संशोधित डिजाइनमूल्य वस्तु में एक आदिम मूल्य को इनकैप्सुलेट करें जिसमें संबंधित सुरक्षा भाव इत्यादि शामिल हैं, ताकि यह सुनिश्चित हो सके कि केवल वैध उदाहरण बनाना संभव है।
प्रिमिटिव्स अविश्वसनीय होते हैं, लेकिन वैल्यू ऑब्जेक्ट नहीं होते हैं।