मैं कई PHP ढांचे, विशेष रूप से ज़ेंड फ्रेमवर्क पर पढ़ रहा हूं लेकिन मैं आगे बढ़ने के उचित तरीके के बारे में उलझन में हूं।क्या डाटामैपर पैटर्न एमवीसी तोड़ता है?
ज़ेंड फ्रेमवर्क सक्रिय रिकॉर्ड्स का उपयोग नहीं करता है बल्कि इसके बजाय टेबल डेटा गेटवे और पंक्ति डेटा गेटवे पैटर्न का उपयोग करता है, और मॉडल डेटा में पंक्ति डेटा गेटवे की सामग्री को मैप करने के लिए डेटामैपर का उपयोग करता है, क्योंकि आपके मॉडल नहीं होने पर ActiveRecord टूट जाता है अपने डेटाबेस टेबल पर 1: 1 मैपिंग है। ज़ेंड क्विकस्टार्ट मार्गदर्शिका में example of this है।
मेरे लिए, उनका उदाहरण पूरे स्थान पर गेटर्स और सेटर्स के टन के साथ बहुत फूला हुआ दिखता है। मैं डोमेन ड्राइव डिज़ाइन के बारे में विभिन्न ब्लॉग पोस्टों में आया था कि बहस करते हुए कि कई गेटर्स और सेटर्स का उपयोग करना बुरा अभ्यास है क्योंकि यह सभी आंतरिक मॉडल डेटा को बाहर निकाल देता है, इसलिए इसका सार्वजनिक गुणों पर कोई फायदा नहीं होता है। Here is one example।
मेरा प्रश्न: यदि आप उन गेटर्स और सेटर्स को हटाते हैं, तो आप अपने विचार कैसे प्रस्तुत करेंगे? किसी बिंदु पर डेटा को दृश्य को हिट करना पड़ता है ताकि आप वास्तव में उपयोगकर्ता को कुछ दिखा सकें। डीडीडी सलाह के बाद एमवीसी में एम और वी के बीच अलगाव तोड़ने लगता है। एमवीसी और ज़ेंड उदाहरण के बाद डीडीडी तोड़ने लगता है और मुझे अपने सभी मॉडलों के लिए बहुत सारे गेटर्स, सेटर्स और डेटामैपर टाइप करना छोड़ देता है। बहुत सारे काम होने के अलावा यह भी DRY का उल्लंघन करता प्रतीत होता है।
मैं वास्तव में कुछ उदाहरणों (लिंक) के अच्छे उदाहरणों या इस बारे में अधिक जानकारी की सराहना करता हूं कि यह सब एक साथ कैसे फिट बैठता है। मैं यहां अपने आर्किटेक्चर और डिज़ाइन कौशल को बेहतर बनाने की कोशिश कर रहा हूं।
धन्यवाद। वह Devlicious लेख एक अच्छा पढ़ा बनाता है। मैं बाकी श्रृंखला को भी पढ़ने जा रहा हूं। –
यह एक अच्छा जवाब है और मैं जोड़ता हूं कि गेटर्स, सेटर्स के साथ गलत बात नहीं है। वास्तव में, उन्हें सत्यापन तर्क जोड़ने का एक शानदार तरीका है। संपत्तियों को सार्वजनिक बनाना त्वरित और गंदा है और प्रोटोटाइप करते समय ठीक है लेकिन एक लंबे दीर्घकालिक समाधान नहीं है। मान लीजिए कि आप किसी संपत्ति का नाम बदलना चाहते हैं। यदि आप ऐसा करते हैं, तो उस संपत्ति का उपयोग करने वाले कोड के प्रत्येक टुकड़े को बदलने की जरूरत है। यदि आप एक्सेसर विधि के लिए सामान्य नाम का उपयोग करते हैं, तो आपको क्लाइंट कोड बदलना नहीं है। इसके अलावा, ज़ेंड डीबी की तुलना में सिद्धांत एक बहुत समृद्ध समाधान है। मैं सिद्धांत 1 की सिफारिश नहीं करता, लेकिन Doctrine2 कोशिश करें। –