आप डेटाबेस इंजन, उपयोगकर्ता अधिसूचना, त्रुटि से निपटने और एक PHP आधारित, वस्तु उन्मुख परियोजना जैसे अपने सहायक वस्तुओं को कैसे व्यवस्थित और प्रबंधित करते हैं?
कहो कि मेरे पास एक बड़ा PHP CMS है। CMS विभिन्न वर्गों में आयोजित किया जाता है। कुछ उदाहरण:
- डेटाबेस ऑब्जेक्ट
- उपयोगकर्ता प्रबंधन
- आइटम बनाने / संशोधित करने / हटाने के लिए एक एपीआई
- संदेश को अंतिम उपयोगकर्ता को प्रदर्शित करने के लिए एक संदेश वस्तु
- एक संदर्भ हैंडलर जो आपको सही पृष्ठ पर ले जाता है
- एक नेविगेशन बार वर्ग जो बटन दिखाता है
- एक लॉगिंग ऑब्जेक्ट
- संभवतः, कस्टम त्रुटि हैंडलिंग
आदि।
मैं शाश्वत प्रश्न के साथ काम कर रहा हूं कि इन वस्तुओं को सिस्टम के प्रत्येक हिस्से तक कैसे पहुंच योग्य बनाया जाए जो इसकी आवश्यकता है।
मेरा पहला ऐपॉर्च, कई साल पहले एक $ अनुप्रयोग वैश्विक था जिसमें इन वर्गों के प्रारंभिक उदाहरण शामिल थे।
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
मैं तब सिंगलटन पैटर्न और एक फैक्ट्री फंक्शन में बदल गया:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
लेकिन मैं इससे खुश नहीं हूं। यूनिट परीक्षण और एनकैप्सुलेशन मेरे लिए अधिक महत्वपूर्ण हो जाते हैं, और मेरी समझ में ग्लोबल्स / सिंगलटन के पीछे के तर्क ओओपी के मूल विचार को नष्ट कर देते हैं।
फिर निश्चित रूप से प्रत्येक वस्तु को सहायक वस्तुओं के लिए कई पॉइंटर्स देने की संभावना है, शायद यह सबसे साफ, संसाधन-बचत और परीक्षण-अनुकूल तरीके से हो लेकिन मुझे लंबे समय में इस की स्थिरता के बारे में संदेह है।
अधिकांश PHP फ्रेमवर्क जो मैंने सिंगलटन पैटर्न, या फ़ंक्शंस में उपयोग किए गए हैं, जो आरंभीकृत वस्तुओं तक पहुंचते हैं। दोनों ठीक हैं, लेकिन जैसा कि मैंने कहा कि मैं न तो खुश हूं।
मैं अपने क्षितिज को व्यापक बनाना चाहूंगा कि यहां क्या सामान्य पैटर्न मौजूद हैं। मैं उदाहरणों, अतिरिक्त विचारों और संसाधनों की ओर संकेत कर रहा हूं जो एक दीर्घकालिक , वास्तविक दुनिया के परिप्रेक्ष्य से इस पर चर्चा करते हैं ।
इसके अलावा, मैं इस मुद्दे पर विशेष, आला या सादे अजीब दृष्टिकोण के बारे में सुनने के लिए इच्छुक हूं ।
$mh=&factory("messageHandler");
कि व्यर्थ है और कोई प्रदर्शन लाभ नहीं देता है। इसके अलावा, यह 5.3 में पदावनत है।