Demeter के कानून के अनुसार, क्या किसी वर्ग को उसके किसी सदस्य को वापस करने की अनुमति है?
हाँ, यह निश्चित रूप से है।
आइए मुख्य बिंदुओं को देखें :
- प्रत्येक इकाई को केवल अन्य इकाइयों के बारे में सीमित ज्ञान होना चाहिए: केवल इकाइयां वर्तमान इकाई से संबंधित "बारीकी से"।
- प्रत्येक इकाई को केवल अपने दोस्तों से बात करनी चाहिए; अजनबियों से बात न करें।
- केवल अपने तात्कालिक दोस्तों से बात करें।
जिनमें से तीन आपको एक सवाल पूछते हुए छोड़ देते हैं: कौन दोस्त है?
जब फैसला करना है कि क्या वापस लौटना है, तो द लॉ ऑफ डेमेटर या कम से कम ज्ञान (एलओडी) का सिद्धांत यह निर्धारित नहीं करता है कि आप कोडर्स के खिलाफ बचाव करते हैं जो इसका उल्लंघन करने पर जोर देते हैं। यह हुक्म देता है कि आप कोडर्स को इसका उल्लंघन करने के लिए मजबूर न करें।
इन भ्रमित हो रही है वास्तव में क्यों कई लगता है एक सेटर हमेशा शून्य वापस करना चाहिए। नहीं। आपको उन प्रश्नों (गेटर्स) बनाने की अनुमति देनी चाहिए जो सिस्टम की स्थिति को नहीं बदलते हैं। यह बुनियादी कमांड क्वेरी अलगाव है ।
क्या इसका मतलब यह है कि आप जो चाहते हैं एक साथ कोडिंग चेन में तल्लीन करने के लिए स्वतंत्र हैं? नहीं, केवल एक साथ जंजीर जो एक साथ जंजीर होना चाहिए था। अन्यथा श्रृंखला बदल सकती है और अचानक आपका सामान टूट जाता है। मित्रों से यही अभिप्राय है।
लंबी श्रृंखला के लिए डिज़ाइन किया जा सकता है। धाराप्रवाह इंटरफेस, iDSL, Java8 के बहुत, और अच्छे पुराने StringBuilder आप लंबी श्रृंखलाओं का निर्माण करने के लिए हैं। वे LoD का उल्लंघन नहीं करते हैं क्योंकि श्रृंखला में सब कुछ एक साथ काम करने के लिए है और एक साथ काम करने का वादा किया है। आप एक साथ सामान की श्रृंखला है जब आप एक दूसरे के बारे में कभी नहीं सुना है कि लोकतंत्र का उल्लंघन करते हैं। मित्र वे हैं जिन्होंने आपकी श्रृंखला को काम करने का वादा किया है। फ्रेंड्स ऑफ फ्रेंड्स नहीं किया।
वर्गों के अलावा जो विशेष रूप से वस्तुओं को वापस करने के लिए नियुक्त किए गए थे - जैसे कि कारखाना और बिल्डर कक्षाएं - क्या किसी वस्तु को वापस करने की विधि के लिए ठीक है, उदाहरण के लिए किसी वर्ग के गुणों में से किसी एक वस्तु को रखा जाता है या जो लोकतंत्र के कानून का उल्लंघन करता है (1) ?
यह केवल लोकतंत्र का उल्लंघन करने का अवसर पैदा करता है। यह उल्लंघन नहीं है। यह जरूरी भी बुरा नहीं है।
और अगर यह लोकतंत्र के कानून का उल्लंघन करता है, तो क्या इससे कोई फर्क पड़ेगा कि लौटाई गई वस्तु एक अपरिवर्तनीय वस्तु है जो डेटा के एक टुकड़े का प्रतिनिधित्व करती है और इस डेटा के लिए कुछ भी नहीं है (2)?
अपरिवर्तनीय अच्छा है, लेकिन यहाँ अप्रासंगिक है। एक लंबी श्रृंखला के माध्यम से सामान प्राप्त करना बेहतर नहीं बनाता है। क्या यह बेहतर बनाता है का उपयोग कर से अलग कर रहा है। यदि आप उपयोग कर रहे हैं, तो आपको एक पैरामीटर के रूप में क्या चाहिए, इसके लिए पूछें। अजनबियों के पाने में बहकने से इसका शिकार न करें।
छद्म कोड में:
मुझे संदेह है कि डेमेटर का कानून उपरोक्त जैसे पैटर्न को मना करता है। मैं यह सुनिश्चित करने के लिए क्या कर सकता हूं कि कानून का उल्लंघन न करते हुए doSomethingElse () कहा जा सकता है?
इससे पहले कि मैं x.doSomethingElse(a)
यह समझूं कि आपने मूल रूप से लिखा है
b.getA().doSomething()
अब, LoD एक डॉट काउंटिंग व्यायाम नहीं है । लेकिन जब आप एक श्रृंखला बनाते हैं तो आप कहते हैं कि आप जानते हैं कि कैसे A
(उपयोग करके B
) और आप जानते हैं कि कैसे उपयोग करें A
। अब अच्छी तरह से A
और B
करीबी दोस्त थे क्योंकि आपने उन्हें एक साथ जोड़ा था।
तुम सिर्फ हाथ करने के लिए कुछ करने के लिए कहा था, तो आप एक A
बात है कि आप इस्तेमाल कर सकते हैं A
और परवाह नहीं होता वह कहाँ से आया और B
हो रही है के साथ एक जीवन सुखी और अपने जुनून की मुक्त रह सकता है A
से B
।
के रूप में x.doSomethingElse(a)
जहां की जानकारी के बिना x
से आया है, लोद सब पर कुछ भी नहीं है इसके बारे में क्या कहना है।
LoD निर्माण से अलग उपयोग को प्रोत्साहित कर सकता है । लेकिन मैं इंगित करूंगा कि यदि आप धार्मिक रूप से हर वस्तु को अनुकूल नहीं मानते हैं तो आप स्थैतिक विधियों में कोड लिखने में फंस जाएंगे। आप मुख्य रूप से एक अद्भुत जटिल वस्तु ग्राफ का निर्माण कर सकते हैं, लेकिन अंततः आपको काम करने वाली चीज़ को शुरू करने के लिए उस पर एक विधि को कॉल करना होगा। आपको बस यह तय करना है कि आपके दोस्त कौन हैं। उससे कोई दूर नहीं हो रहा है।
तो हाँ, एक वर्ग को LoD के तहत अपने सदस्यों में से एक को वापस करने की अनुमति है। जब आप करते हैं तो आपको यह स्पष्ट करना चाहिए कि क्या वह सदस्य आपकी कक्षा के साथ मित्रवत है क्योंकि यदि ऐसा नहीं है, तो कुछ ग्राहक आपको उस वर्ग का उपयोग करने से पहले उसे प्राप्त करने के लिए आपको इसका उपयोग करने के लिए युग्मित करने का प्रयास कर सकते हैं। यह महत्वपूर्ण है क्योंकि अब आप जो लौटाते हैं वह हमेशा उस उपयोग का समर्थन करना चाहिए।
ऐसे कई मामले हैं जहां यह केवल एक चिंता का विषय नहीं है। संग्रह इसे केवल इसलिए अनदेखा कर सकते हैं क्योंकि उनका उपयोग उन सभी चीज़ों से दोस्ती करने के लिए होता है जो उनका उपयोग करती हैं। इसी प्रकार मूल्य वस्तुएं सभी के साथ अनुकूल होती हैं। लेकिन अगर आपने एक पता लिखा है जो उपयोगिता को मान्य करता है, तो उसने एक कर्मचारी वस्तु की मांग की है कि वह एक पते को निकाले, बल्कि उसके बाद केवल पते के लिए पूछें, तो आप बेहतर उम्मीद करेंगे कि कर्मचारी और पता दोनों एक ही पुस्तकालय से आए।