प्रश्न"बताओ, नहीं पूछें" एकाधिक डोमेन से अधिक वस्तुओं
जब एक से अधिक ऑब्जेक्ट को शामिल एक समारोह प्रदर्शन कर मैं कैसे "Tell, Don't Ask" सिद्धांत का पालन करते हैं।
उदाहरण - एक रिपोर्ट
मैं निम्नलिखित वस्तुओं (उदाहरण के उद्देश्यों केवल) है जनरेट कर रहा है:
कार हार्स, खरगोश
इन वस्तुओं के बीच कोई रिश्ता नहीं है, , लेकिन मैं इन वस्तुओं के आधार पर एक रिपोर्ट उत्पन्न करना चाहता हूं:
createHtmlReport(Car car, Horse horse, Rabbit rabbit){
Report report = new Report()
report.setSomeField(car.getSerialNumber())
report.setAnotherField(horse.getNumberOfLegs())
// ...etc
}
इस विधि के साथ समस्या यह है कि इसे प्रत्येक ऑब्जेक्ट से "खींचें" डेटा होना है, जो "बताओ, पूछो मत" नियम का उल्लंघन करता है। मैं नहीं बल्कि प्रत्येक वस्तु छिपा के अंदर रखने होगा, और उन्हें मेरे लिए एक रिपोर्ट तैयार की है:
car.createHtmlReport()
horse.createHtmlReport()
rabbit.createHtmlReport()
... लेकिन फिर मैं 3 आंशिक रिपोर्ट प्राप्त करें। इसके अलावा, मुझे नहीं लगता कि एक खरगोश को यह जानना चाहिए कि मुझे हर एक रिपोर्ट को कैसे उत्पन्न करना है (एचटीएमएल, जेएमएस, एक्सएमएल, जेएसओएन ....)।
अंत में, जबकि रिपोर्ट मैं कई वस्तुओं पर स्विच कर सकते हैं पैदा:
if (car.getWheels() == 4 || horse.getLegs() == 4)
// do something
लिंक और प्रश्न के लिए +1 और एफएवी। – knownasilya