के साथ संबंधों को संभालना मैं डेटा मैपर पैटर्न का उपयोग कर रहा हूं और मुझे आश्चर्य है कि उस पैटर्न के साथ संबंधों को संभालने का सबसे अच्छा तरीका क्या है। मैंने Google और स्टैक ओवरफ़्लो में समाधान खोजने में काफी समय बिताया, मुझे कुछ मिला लेकिन मैं अभी भी उनके बारे में पूरी तरह से खुश नहीं हूं, खासकर एक विशेष मामले में जिसे मैं समझाने की कोशिश करूंगा।डेटा मैपर पैटर्न
मैं PHP के साथ काम कर रहा हूं इसलिए कोड के उदाहरण जो मैं रखूंगा वो PHP में हैं।
मान लें कि मेरे पास एक टेबल "टीम" (आईडी, नाम) और एक टेबल "प्लेयर" (आईडी, नाम, team_id) है। यह 1-एन संबंध है। डेटा मैपर पैटर्न को लागू करके, हमारे पास निम्नलिखित कक्षाएं होंगी: टीम, टीममैपर, प्लेयर और प्लेयरमैपर।
अभी तक, सबकुछ सरल है। क्या होगा यदि हम सभी खिलाड़ियों को एक टीम से प्राप्त करना चाहते हैं?
मुझे मिला पहला समाधान टीम क्लास में एक विधि getAllPlayers() बनाने के लिए है जो आलसी लोडिंग और प्रॉक्सी के साथ संभाल लेंगे। फिर हम उस तरह एक टीम के खिलाड़ियों को पुनः प्राप्त कर सकते हैं:
$players = $team->getAllPlayers();
दूसरा समाधान मैंने पाया सीधे PlayerMapper का उपयोग करें और पैरामीटर के रूप में टीम आईडी पारित करने के लिए है। की तरह कुछ:
$playerMapper->findAll(array('team_id' => $team->getId()));
लेकिन अब, मान लें कि मैं सभी टीमों के साथ और प्रत्येक टीम के खिलाड़ियों के सभी के साथ एक कॉलम 'प्लेयर्स' के साथ एक HTML तालिका प्रदर्शित करने के लिए चाहते हैं। यदि हम वर्णन किए गए पहले समाधान का उपयोग करते हैं, तो हमें टीमों की सूची प्राप्त करने के लिए एक एसक्यूएल क्वेरी करना होगा और खिलाड़ियों को प्राप्त करने के लिए प्रत्येक टीम के लिए एक प्रश्न, whcih का मतलब एन + 1 एसक्यूएल प्रश्न है जहां एन टीमों की संख्या है।
अगर हम दूसरे समाधान मैं वर्णित का उपयोग, हम पहले, सभी टीम आईडी प्राप्त कर सकते हैं उन्हें एक सरणी में डाल दिया, और उसके बाद, खिलाड़ी नक्शाकार की findAll विधि करने के लिए इसे पारित ऐसा ही कुछ:
$playerMapper->findAll(array('team_id' => $teamIds));
उस स्थिति में, हमें केवल 2 प्रश्नों को चलाने की आवश्यकता है। काफी बेहतर। लेकिन मैं अभी भी उस समाधान से बहुत खुश नहीं हूं क्योंकि संबंधों को मॉडल में वर्णित नहीं किया गया है और यह डेवलपर है जो उनके बारे में जानना चाहिए।
तो मेरा सवाल है: क्या डेटा मैपर पैटर्न के साथ अन्य विकल्प हैं? उदाहरण के साथ, क्या मॉडल में संबंधों के विवरण के साथ केवल 2 प्रश्नों में सभी खिलाड़ियों के साथ सभी टीमों का चयन करने का एक अच्छा तरीका है?
अग्रिम धन्यवाद!
कौन सा मार्टिन फाउलर का पाठ आप संदर्भित करते हैं? मुझे मिला एकमात्र ऐसा है (http://www.martinfowler.com/eaaCatalog/dataMapper.html) और मुझे आपके बारे में कुछ भी दिखाई नहीं देता है। वैसे भी, यह दृष्टिकोण मुझे विश्वास नहीं करता है। इसका मतलब है कि आपको बहुत सारे डुप्लिकेट डेटा के साथ एनएक्सएम पंक्तियों (एन टीमों की संख्या और एम खिलाड़ियों की संख्या के साथ) को वापस करने के लिए एक प्रश्न करना है। और इसका मतलब टीम मैपर के माध्यम से खिलाड़ियों को मैप करना भी है जो इतना अच्छा नहीं लगता है। और जैसा कि आपने कहा, मुझे यकीन है कि इस दृष्टिकोण के साथ और नीचे की समस्याएं हैं ... – Vincent
यह पीओईएए पुस्तक में है। वेबसाइट केवल एक सिंहावलोकन प्रदान करता है। आपकी क्वेरी एनएक्सएम पंक्तियों, केवल एम पंक्तियों को वापस नहीं करती है। यह बहुत सारे डेटा वापस लाता है, लेकिन यह बात है। एक गोल यात्रा जितना संभव हो उतना पकड़ो। इसके अलावा, आपकी टीम मैपर प्लेयर्स को मैप नहीं करती है, यह प्लेयर मैपर से इसके लिए खिलाड़ियों को मैप करने के लिए कहती है। –
हाँ, क्षमा करें, एम पंक्तियां। खैर, यह एक समाधान है लेकिन मैं अभी भी पूरी तरह से आश्वस्त नहीं हूं। चलो देखते हैं कि मेरा प्रश्न अधिक जवाब लाएगा ... – Vincent