मैंने जो एलओडी विवरण देखा है (उदाहरण के लिए, Wikipedia, C2 Wiki) विधियों को कॉल करने के बारे में बात करें। विकिपीडिया के शब्दों में:क्या डेमेटर का कानून केवल विधियों पर लागू होता है?
दायरे मेंकार्यों के लिए Demeter के कानून की आवश्यकता है कि एक वस्तु हे की एक विधि एम केवल तरीकों वस्तुओं में निम्न प्रकार के आह्वान हो सकता है:
की
- हे ही
- एम के मानकों
- किसी ऑब्जेक्ट का निर्माण/एम
भीतर instantiated - ओ के प्रत्यक्ष घटक वस्तुओं
- एक वैश्विक चर, सुलभ हे द्वारा, एम
लेकिन गुण, चर या enums तक पहुंचने के बारे में क्या? उदाहरण के लिए, यह दिया गया:
class FirstClass {
public SecondClass GetRelatedClass() {
return new SecondClass();
}
public enum InnerEnum {
Violated,
NotViolated
}
}
class SecondClass {
public int Property {get; set;}
public string _variable = "Danny Demeter";
}
क्या इनमें से कोई भी/सभी एलओडी उल्लंघन है? (अब के लिए प्रत्यक्ष चर का उपयोग पर ध्यान न दें, यदि आप कर सकते हैं ..)
void Violate(FirstClass first) {
SecondClass second = first.GetRelatedClass();
var x = second.Property;
var y = second._variable;
var z = FirstClass.InnerEnum.Violated;
}
मैं पहले दो (चाहे 'सरकारी' उल्लंघन है या नहीं) ऐसा नहीं होता है, काफी इतना enum हालांकि बारे में निश्चित नहीं।
दरअसल। कारण सी 2 विकी उदाहरण चर, फ़ील्ड, गुण, enums, विशेषताओं, स्लॉट इत्यादि के बारे में बात नहीं करता है, क्योंकि बस उस समुदाय के सदस्यों का एक बड़ा हिस्सा पुराने स्मॉलटाकर हैं जहां वे सभी निजी हैं। फ़ील्ड्स, एट्रिब्यूट्स, इंस्टेंस वेरिएबल्स, स्लॉट्स या जो कुछ भी कहा जाता है वे गेटटर/सेटर विधियों की एक जोड़ी के लिए आइसोमोर्फिक हैं, और चूंकि वे * आइसोमोर्फिक हैं, यह स्पष्ट होना चाहिए कि एक फ़ील्ड और गेटटर के बीच आगे और पीछे स्विच करना नहीं चाहिए किसी भी तरह से डेमेटर गुण।एक क्षेत्र को बस एक विधि के रूप में माना जाना चाहिए। –