स्टेटिक टाइप सिस्टम डेटा के गलत उपयोग को रोकने के बारे में हैं।
इस प्रकार के स्पष्ट उदाहरण हैं:
- आप एक UUID का महीना नहीं प्राप्त कर सकते
- आप दो तार गुणा नहीं कर सकते।
और अधिक सूक्ष्म उदाहरण हैं
- आप डेस्क की लंबाई का उपयोग करके कुछ के लिए भुगतान नहीं कर सकते
- आप URL के रूप में किसी के नाम का उपयोग करके HTTP अनुरोध नहीं कर सकते।
हमें double
कीमत और लंबाई दोनों के लिए उपयोग करने के लिए लुभाया जा सकता है , या string
नाम और URL दोनों के लिए उपयोग किया जा सकता है । लेकिन ऐसा करने से हमारी भयानक प्रकार की प्रणाली खराब हो जाती है, और ये दुरुपयोग भाषा की स्थैतिक जाँच को पारित करने की अनुमति देता है।
न्यूटन-सेकंड के साथ भ्रमित होने वाले पाउंड-सेकंड के खराब होने के परिणाम खराब हो सकते हैं ।
यह विशेष रूप से तार के साथ एक समस्या है। वे अक्सर "सार्वभौमिक डेटा प्रकार" बन जाते हैं।
हम मुख्य रूप से कंप्यूटर के साथ पाठ इंटरफेस का उपयोग करते हैं, और हम अक्सर इन मानवीय इंटरफेस (UIs) को प्रोग्रामिंग इंटरफेस (API) तक बढ़ाते हैं । हम पात्रों के रूप में 34.25 के बारे में सोच 34.25 । हम पात्रों के रूप में एक तारीख के बारे में सोचते हैं 05-03-2015 । हम UUID को 75e945ee-f1e9-11e4-b9b2-1697f925ec7b अक्षर मानते हैं ।
लेकिन यह मानसिक मॉडल एपीआई एब्सट्रैक्ट को परेशान करता है।
शब्द या भाषा, जैसा कि वे लिखे या बोले गए हैं, मेरे विचार के तंत्र में कोई भूमिका नहीं लगती है।
अल्बर्ट आइंस्टीन
इसी प्रकार, पाठात्मक अभ्यावेदन को डिजाइनिंग प्रकार और एपीआई में कोई भूमिका नहीं निभानी चाहिए। खबरदार string
! (और अन्य पीढ़ी सामान्य "आदिम" प्रकार)
प्रकार "संचार क्या समझ में आता है।"
उदाहरण के लिए, मैंने एक बार HTTP REST API के क्लाइंट पर काम किया। ठीक से, ठीक से किया गया, हाइपरमीडिया संस्थाओं का उपयोग करें, जिनके पास संबंधित संस्थाओं को इंगित करने वाले हाइपरलिंक हैं। इस क्लाइंट में, न केवल टाइपिंग की गई इकाइयाँ (जैसे उपयोगकर्ता, खाता, सदस्यता), उन संस्थाओं के लिंक भी टाइप किए गए थे (UserLink, AccountLink, SubscriptionLink)। लिंक लगभग रैपर से अधिक थे Uri
, लेकिन अलग-अलग प्रकारों ने उपयोगकर्ता को लाने के लिए अकाउंटलिंक का उपयोग करने की कोशिश करना असंभव बना दिया। अगर सब कुछ सादा था Uri
- या इससे भी बुरा, string
- ये गलतियाँ केवल रनटाइम के दौरान होंगी।
इसी तरह, आपकी स्थिति में, आपके पास डेटा है जो केवल एक ही उद्देश्य के लिए उपयोग किया जाता है: एक की पहचान करने के लिए Operation
। इसका उपयोग किसी और चीज के लिए नहीं किया जाना चाहिए, और हमने उन Operation
यादृच्छिक तारों के साथ पहचान करने की कोशिश नहीं की है जिन्हें हमने बनाया है। एक अलग वर्ग बनाना आपके कोड में पठनीयता और सुरक्षा जोड़ता है।
बेशक, सभी अच्छी चीजों का उपयोग अधिक मात्रा में किया जा सकता है। विचार करें
आपके कोड में कितनी स्पष्टता है
इसका उपयोग कितनी बार किया जाता है
यदि डेटा का एक "प्रकार" (अमूर्त अर्थ में) अक्सर उपयोग किया जाता है, अलग-अलग उद्देश्यों के लिए, और कोड इंटरफेस के बीच, यह वर्बोसिटी की कीमत पर एक अलग वर्ग होने के लिए एक बहुत अच्छा उम्मीदवार है।