मेरे पास Cat
नामक एक टेबल है, और Cat
नामक एक PHP वर्ग है। अब मैं CatDataMapper
कक्षा बनाना चाहता हूं, ताकि Cat extends CatDataMapper
।डेटा मैपर आमतौर पर कैसा दिखता है?
मैं चाहता हूं कि डेटा मैपर क्लास ORM करने के लिए मूल कार्यक्षमता प्रदान करे, और बिल्ली बनाने, संपादित करने और हटाने के लिए।
उस उद्देश्य के लिए, शायद कोई भी जो इस पैटर्न को बहुत अच्छी तरह जानता है, मुझे कुछ सहायक सलाह दे सकता है? मुझे लगता है कि यह कुछ कार्यों जैसे अद्यतन(), हटाएं(), सेव() को प्रदान करने के लिए थोड़ा सा आसान होगा।
मुझे एहसास है कि डेटा मैपर में यह समस्या है: सबसे पहले आप बिल्ली का उदाहरण बनाते हैं, फिर नाम, फरकॉलर, आंखों के रंग, purrSound, meowSound, attendants, आदि जैसे सभी चर शुरू करें .. और सबकुछ स्थापित होने के बाद, आप Save() फ़ंक्शन को कॉल करें जिसे CatDataMapper से विरासत में मिला है। यह आसान था;) लेकिन अब, असली समस्या: आप बिल्लियों के लिए डेटाबेस से पूछताछ करते हैं और बिल्लियों के डेटा के साथ एक सादा उबाऊ परिणाम सेट वापस प्राप्त करते हैं।
पीडीओ में बिल्ली उदाहरण बनाने के लिए कुछ ओआरएम क्षमता है। आइए कहें कि मैं इसका उपयोग करता हूं, या यह भी कहता हूं कि मेरे पास एक नक्शा डेटासेट() फ़ंक्शन है जो एक सहयोगी सरणी लेता है। हालांकि, जैसे ही मुझे डेटा सेट से मेरी बिल्ली वस्तु मिली, मेरे पास अनावश्यक डेटा है। साथ ही, बीस उपयोगकर्ता डेटाबेस से एक ही बिल्ली डेटा उठा सकते हैं और बिल्ली ऑब्जेक्ट को संपादित कर सकते हैं, यानी बिल्ली का नाम बदलें, और इसे सहेजें(), जबकि कोई अन्य उपयोगकर्ता अभी भी एक और फरकॉलर सेट करने के बारे में चीजें हैं। जब वे सभी अपने संपादन को बचाते हैं, तो सब कुछ गड़बड़ हो जाता है।
एर ... ठीक है, यह प्रश्न वास्तव में छोटा रखने के लिए: यहां अच्छा अभ्यास क्या है?
मेरे पास डेटा मैपर बनाम टेबल डेटा गेटवे (टीडीजी) के बारे में एक प्रश्न है। टीडीजी पैटर्न टेबल एक टेबल के साथ 1: 1 मानचित्र करता है, लेकिन अक्सर कुछ टीडीजी कक्षा विधियों में, हमें अन्य टेबल के साथ मुख्य तालिका में शामिल होने की आवश्यकता होती है (अतिरिक्त जानकारी चुनने के लिए कुछ पैरेंट टेबल के साथ जुड़ने के लिए)। क्या ऐसी चीज टेबल डेटा गेटवे पैटर्न का उल्लंघन करती है? आईएमएचओ जैसे ही आप टीडीजी कक्षा विधियों में एसक्यूएल स्टेटमेंट्स में अन्य डीबी टेबल (यहां तक कि जुड़ते हैं) जोड़ते हैं, या अपने मॉडल (डोमेन मॉडल या टेबल डेटा) कक्षाओं को दो में विभाजित करते हैं - कक्षा डेटा मैपर क्लास बन जाती है। आईएमएचओ डाटा मैपर आपके टीडीजी कक्षाओं का एक सामान्य विकास है। – Centurion
इसके अलावा, यदि आपका कार्यान्वित डेटा स्रोत वर्ग विभिन्न स्रोतों (डीबी या कुछ webservice) से कनेक्ट करने में सक्षम है तो IMHO आपने डेटा मैपर क्लास लागू किया है। – Centurion
फाउलर पीओईएए में बताता है कि एक टीडीजी में कई तालिकाओं/विचारों तक पहुंचने के लिए कोड हो सकता है, इसलिए मुझे लगता है कि आप इसमें भी शामिल हो सकते हैं। लेकिन निश्चित रूप से इसका मतलब है कि लौटाए गए परिणाम तालिकाओं में 1: 1 से मेल नहीं खाते हैं और आपको सामान्य अपडेट के अलावा उन पंक्तियों के लिए विशेष अपडेट और सम्मिलित प्रश्नों की आवश्यकता होगी। मैं देख सकता हूं कि यह आपको कैसे निष्कर्ष निकालता है कि यह डेटा मैपर जैसा दिखता है लेकिन डेटा मैपर का उद्देश्य वास्तव में उससे कहीं अधिक जटिल है। यह सिर्फ जॉइन => डेटामैपर नहीं है। Http://css.dzone.com/books/practical-php-patterns/practical-php-patterns-data – Gordon