आवश्यक नहीं है। "केवल एक बिंदु का उपयोग करें" डेमेटर के कानून का एक गलत सारांश है।
Demeter के कानून जब प्रत्येक डॉट एक अलग वस्तु, का परिणाम का प्रतिनिधित्व करता है कई बिंदुओं का उपयोग को हतोत्साहित जैसे:
- पहले डॉट एक विधि ObjectA से कहा जाता है, प्रकार का ऑब्जेक्ट लौटने है ObjectB
- अगला डॉट प्रकार का ऑब्जेक्ट लौटने ObjectC
- अगला डॉट एक संपत्ति केवल ObjectC में
- अनंत तक
उपलब्ध है, एक विधि केवल ObjectB में उपलब्ध है
हालांकि, कम से कम मेरी राय में, Demeter के कानून का उल्लंघन नहीं है, तो प्रत्येक डॉट की वापसी वस्तु अभी भी मूल फोन करने वाले के रूप में एक ही प्रकार है:
var List<SomeObj> list = new List<SomeObj>();
//initialize data here
return list.FindAll(i => i == someValue).Sort(i1, i2 => i2 > i1).ToArray();
उपरोक्त उदाहरण में, दोनों FindAll () और सॉर्ट करें() उसी प्रकार की ऑब्जेक्ट को मूल सूची के रूप में वापस कर दें। डेमेटर के कानून का उल्लंघन नहीं किया जाता है: सूची केवल अपने तत्काल मित्रों से बात की जाती है।
कहा जा रहा है कि सभी धाराप्रवाह इंटरफेस डेमेटर के कानून का उल्लंघन करते हैं, जब तक वे अपने कॉलर के समान प्रकार लौटते हैं।
स्रोत
2008-09-15 22:28:00
कोई तर्क दे सकता है कि एक धाराप्रवाह इंटरफ़ेस डेमेटर के कानून का उल्लंघन नहीं करता है क्योंकि आप केवल एक ही ऑब्जेक्ट को डॉट श्रृंखला में एक्सेस कर रहे हैं। – MSN
इस पर ध्यान देने का दूसरा तरीका यह है कि एक धाराप्रवाह इंटरफेस बस क्रमबद्ध संचालन करने का एक वैकल्पिक, कॉम्पैक्ट तरीका है जिससे राज्य उत्परिवर्तन दूर हो जाता है, क्योंकि प्रत्येक मध्यवर्ती चरण के परिणाम निहित होते हैं। –