2012-01-01 11 views
8

बस टेबल डेटा गेटवे (टीडीजी) कार्यान्वयन के बारे में बताएं: आप अलग टीडीजी कक्षा बनाते हैं जिसमें ठोस तालिका के साथ सीआरयूडी संचालन के लिए एसक्यूएल शामिल है। इसलिए, आपके मॉडल सीधे डेटासॉर (उदाहरण के लिए डेटाबेस) के साथ संवाद नहीं करते हैं, लेकिन उन सार तत्वों के माध्यम से - टीडीजी कक्षाएं। तो, यह एक और स्तर का अमूर्त बनाने के लिए एक दृष्टिकोण है और यह डाटाबेस के साथ संवाद करने के लिए सिर्फ एक रैपर है - डेटा प्राप्त करें और संशोधित करें। आईएमएचओ टीडीजी कक्षाओं में सदस्यों, केवल विधियों में शामिल नहीं होना चाहिए। यहां एक अच्छी स्कीमा है जो TDG pattern उपयोग को विज़ुअलाइज़ करती है। टीडीजी दृष्टिकोण का उपयोग करते समय, एसक्यूएल को मॉडल कक्षाओं से डेटासोर्स (टीडीजी) कक्षाओं में स्थानांतरित किया जाना चाहिए। और टीडीजी कक्षाओं के माध्यम से डीबी से प्राप्त होने वाले सभी डेटा मेरे मॉडल सदस्यों में संग्रहीत किए जाते हैं।टेबल डेटा गेटवे के कार्यान्वयन को सक्रिय रिकॉर्ड से अलग कैसे किया जाता है?

अब, सक्रिय रिकॉर्ड कार्यान्वयन के बारे में क्या? अगर मैं डेटा एक्सेस और मेरी मॉडल क्लास को एक मॉडल क्लास में विलय कर दूंगा तो क्या मैं सक्रिय रिकॉर्ड लागू करूंगा? मैं एक स्पष्ट भेद खोजने में असमर्थ था या वे पैटर्न PHP में कैसे दिखते हैं और एक-दूसरे से अलग होते हैं।

अक्सर, मेरे पास एक सिंगलटन डेटाबेस क्लास है और फिर प्रत्येक डेटाबेस तालिका के लिए अलग मॉडल वर्ग है। प्रत्येक मॉडल वर्ग में सीआरयूडी + कई कस्टम (गिनती, औसत और आदि) संचालन होते हैं। कुछ वर्गों में सीआरयूडी या कस्टम ऑपरेशंस से लगातार परिणामों के लिए सदस्य होते हैं - यह ज़रूरत पर किया जाता है। क्या इस दृष्टिकोण को सक्रिय रिकॉर्ड के रूप में पहचाना जा सकता है? इसके अलावा, अगर मैं अपने मॉडल वर्गों से टीडीजी कक्षाओं में एसक्यूएल ले जाऊंगा तो क्या यह टेबल डेटा गेटवे होगा? एक वस्तु है कि एक डेटाबेस तालिका करने के लिए एक गेटवे (466) के रूप में कार्य करता है:

उत्तर

14
से http://martinfowler.com/eaaCatalog/index.html

तालिका डेटा गेटवे

। एक उदाहरण तालिका में सभी पंक्तियों को संभालता है।

enter image description here

सक्रिय रिकॉर्ड: एक उद्देश्य यह है कि एक डेटाबेस तालिका या दृश्य में एक पंक्ति लपेटता, डेटाबेस का उपयोग समाहित, और उस डेटा पर डोमेन तर्क कहते हैं।

enter image description here

स्पष्ट मुख्य अंतर यह है कि TDGs एक तालिका के लिए उपयोग लपेट और केवल पंक्ति डेटा देता है, जबकि ARS तालिका में एक पंक्ति के लिए उपयोग लपेट है और लिए व्यापार तर्क कहते हैं यह।

जब तक आपके पास बहुत कम प्रतिबाधा मेल नहीं है, तो टीडीजी को प्राथमिकता दी जाती है क्योंकि एआर के साथ आपके व्यवसाय/डोमेन ऑब्जेक्ट्स डेटाबेस में संरचना का पालन करते हैं, जो आमतौर पर नहीं है कि आपकी डोमेन ऑब्जेक्ट्स को मॉडल कैसे किया जाना चाहिए। एक पंक्ति जानता है कि खुद को कैसे बनाए रखना है, लेकिन एक व्यक्ति को पता नहीं होना चाहिए। यह दृढ़ता तर्क और डोमेन तर्क को अलग करने के लिए लंबे समय तक अधिक रखरखाव योग्य है।

आपके सिंगलटन डीबी ऑब्जेक्ट के बारे में Is there a use-case for singletons with database access in PHP? पर एक नज़र डालें।

+0

धन्यवाद। टीडीजी लागू करते समय मुझे किस तरह के तरीकों (और एसक्यूएल प्रश्न) हो सकते हैं? मुझे व्यापार तर्क नहीं देना चाहिए, लेकिन व्यापार तर्क सामग्री क्या माना जा सकता है? उदाहरण के लिए, क्या मेरे पास टीडीजी कक्षाओं में चयन विधियां, बैच अपडेट (डेटा की एक सरणी पास), इस तरह के विधियां (और एसक्यूएल प्रश्न) हो सकती हैं, selectAllPersonsByLastName, countAll, SelectAvg और आदि? आईएमएचओ उन सभी को टीडीजी कक्षा में रहना चाहिए। क्या व्यापार तर्क सामग्री का अर्थ है टीडीजी कक्षा से व्युत्पन्न SQL परिणाम सेट से बनाई गई अतिरिक्त गणना? – Centurion

+0

@Centurion एक टीडीजी में तालिका से संबंधित सभी SQL क्वेरी हो सकती हैं: आवेषण, अद्यतन, चयन (दृढ़ता तर्क)।इसमें क्वेरी परिणाम (व्यापार तर्क) संसाधित कोड शामिल नहीं होना चाहिए। रखो कि या तो एक [डोमेन मॉडल] (http://martinfowler.com/eaaCatalog/domainModel.html) या एक [टेबल मॉड्यूल] (http://martinfowler.com/eaaCatalog/tableModule.html) – Gordon

+0

में विचार मिल गया:) लेकिन मेरे पास एक और सवाल है। एक टेबल मॉड्यूल क्लास एक टेबल पर मैप्स करता है, इसलिए आईएमएचओ ऐसी टेबल मॉड्यूल क्लास को मॉडल के रूप में माना जा सकता है (एमवीसी संदर्भ में बात करते समय)? डोमेन मॉडल के बारे में क्या, मॉडल को तब क्या माना जाना चाहिए? कंक्रीट नियंत्रक के लिए उपयोग की जाने वाली कक्षाओं का एक समूह? – Centurion

संबंधित मुद्दे