वस्तु उन्मुख डिजाइन के लिए GRASP दिशा-निर्देशों में Information Expert सिद्धांत का पालन करें:
... इसे पूरा करने के लिए आवश्यक जानकारी के साथ सबसे कक्षाओं में एक जिम्मेदारी जगह।
तो आप उस कक्षा से लॉग पर लिखेंगे जिसमें आपको लॉग इन करने के लिए आवश्यक डेटा शामिल है। यदि आप जिस ईवेंट को लॉग करना चाहते हैं, वह मॉडल के काम से संबंधित है, तो मॉडल में लॉग को लिखें। यदि ईवेंट नियंत्रक के काम से संबंधित लॉग इन करना चाहता है, तो नियंत्रक में लॉग को लिखें।
ऐप के लिए एक लॉग आउटपुट बनाएं। अन्यथा आपको किसी भी नैदानिक जानकारी को खोजने के लिए कई लॉग फ़ाइलों के माध्यम से शिकार करना होगा! आप Zend_Registry
में एक लॉग ऑब्जेक्ट स्टोर कर सकते हैं ताकि आप अपने ऐप में किसी भी कक्षा से लॉग को कॉल कर सकें।
अपनी टिप्पणी पुन:
बेहतर बस नाकाम शान से अगर लकड़हारा नहीं की उम्मीद रजिस्ट्री कुंजी के अंतर्गत पाया जाता है। ग़लत ढंग से असफल होने का मतलब है कि या तो stdout (वेब पेज पर) या stderr (httpd सर्वर लॉग में) के लिए त्रुटि उत्पन्न करें, या अपवाद फेंक दें और ऐप को इसे संभालने दें।
निर्भरताओं के लिए, यह कोई समस्या नहीं है। जब भी कोई वर्ग किसी अन्य वर्ग का उपयोग करता है तो आपके पास समान निर्भरता होती है। Registry डिज़ाइन पैटर्न देखें।
स्रोत
2010-05-26 07:39:30
लेकिन रजिस्ट्री से खींचने वाले लॉगर के साथ, मॉडल की एक नई "छिपी हुई" निर्भरता है। यदि मैं किसी अन्य ऐप में मॉडल का उपयोग करता हूं - शायद लॉगिंग या किसी भिन्न कुंजी के नीचे संग्रहीत किए बिना - तो लॉगर प्राप्त करने का प्रयास विफल हो जाएगा। तो, क्या मेरे सभी मॉडल एक बेस मॉडल को उप-वर्ग करना चाहिए जिसमें लॉग(), setLogger(), getLogger() जैसी विधियां हों? या वह सिर्फ overkill है? –
बहुत उपयोगी, बहुत धन्यवाद। ;-) –