2011-02-02 6 views
11

मुझे पता है कि कुछ उपयोगकर्ता ज़ेंड फ्रेमवर्क में Zend_Db के बजाय सिद्धांत 2 का उपयोग करते हैं। लेकिन मुझे नहीं पता क्यों। Zend_Db से Doctrine2 बेहतर क्यों है और Zend_Db क्यों अच्छा नहीं है?क्या ज़ेंड फ्रेमवर्क के साथ सिद्धांत 2 का उपयोग करना उचित है?

धन्यवाद

उत्तर

25

(7-मार्च 2013) अस्वीकरण: इस उत्तर शायद अब पुराना हो चुका एक सा है। मैं इस समय PHP समुदाय के साथ नहीं रह रहा हूं और यह तुलना सिद्धांत ओआरएम v2 और ज़ेंड फ्रेमवर्क v1 के बीच है। यह एक सेब बनाम संतरे की तुलना है क्योंकि वे दो अलग-अलग चीजें हैं।


आउट ऑफ द बॉक्स Zend_Db पीडीओ, जहां के रूप में सिद्धांत 2 एक वस्तु संबंधपरक मैपर (जो अपने आप DBAL के शीर्ष पर बैठता है) है की चोटी पर अधिक सिर्फ एक बढ़ाया डेटाबेस अमूर्त परत है।

अधिक जटिल डोमेन परतों के लिए सिद्धांत 2 बहुत बेहतर है, क्योंकि आपके सभी व्यावसायिक तर्क, दृढ़ता तर्क, आदि कई कक्षाओं में अलग हो गए हैं, इसलिए वे कई भूमिकाएं नहीं देते हैं। इसके अलावा, क्योंकि आपके पास अधिक कक्षाएं हैं - जो क्लीनर और ढीले-युग्मित हैं - यह उन्हें अधिक आसान परीक्षण करती है।

फ़्यूथरमोर, आप SQL का केवल अंश ही लिखेंगे जो आप Zend_Db का उपयोग कर रहे हैं, क्योंकि आप अपनी इकाई ऑब्जेक्ट्स में हेरफेर कर सकते हैं और सिद्धांत डेटाबेस में उन परिवर्तनों का अनुवाद करता है। जेनरेटेड एसक्यूएल लेनदेन का लाभ भी लेता है जो आपको एक अच्छा प्रदर्शन लाभ देता है!

मैं आपको डॉक्टर-संचालित डिजाइन पर पढ़ने की सलाह दूंगा ताकि यह समझ सके कि सिद्धांत 2 इतना बढ़िया क्यों है।

मुझे गलत हालांकि मिलता है नहीं, तो आप Zend_Db साथ DDD कर सकते हैं लेकिन यह वास्तव में वहाँ OOTB नहीं है (क्योंकि यह एक ORM नहीं है), और लगभग के रूप में शक्तिशाली और पूर्ण विशेषताओं सिद्धांत की तरह 2.

नहीं होगा
+1

सहमत हुए। Zend_Db किसी भी मध्यम या बड़ी परियोजना के लिए एक गड़बड़ है। जबकि सिद्धांत में आपके पास प्रत्येक इकाई के लिए एक संग्रह है, Zend_Db के साथ आप Zend_Db_Table को विस्तारित कर देंगे, जो तालिका डेटा गेटवे पैटर्न का उपयोग करेगा, और getAllAllowedUsers() जैसे विधियों सहित कई सारणी में शामिल होने वाले एसक्यूएल के साथ और जिसके परिणामस्वरूप Zend_Db_Table_Row वास्तव में ' टी में आपके वास्तविक व्यापार मॉडल के साथ कुछ भी नहीं है। तो आप रिपोजिटरी पैटर्न के साथ Zend_Db_Table मर्ज करें। हो सकता है कि आपको एहसास हो कि आपको वास्तव में डेटा मैपर की आवश्यकता है, इसलिए आप पहिया को फिर से शुरू करने के लिए अपना खुद का कार्यान्वयन करना शुरू कर दें। –

+0

या इससे भी बदतर: कुछ डेवलपर नियंत्रक पर ही चयन करते हैं। 'listAction() {' $ userTable-> चुनें() '... –

+0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन दो साल के सिद्धांत 2 + ज़ेंड फ्रेमवर्क प्रयोग में मैं पूरी तरह से सिद्धांत 2 का उपयोग करने की सिफारिश नहीं करता हूं यह बहुत धीमा है धीमा, यह वेब अनुप्रयोग के लिए अच्छा नहीं है, इसमें बहुत ही अमूर्तता है लेकिन इसमें बड़ी कमी भी है। – albanx

0

आप एक छोटी परियोजना है जो एक विशिष्ट डीबीएमएस उपयोग करने के लिए बाध्य है है, तो आप ORM और सिद्धांत की जरूरत नहीं है।

अगर आप एक परियोजना है जो बड़ी है और भविष्य में एक DBMS से दूसरे में स्विच करने के लिए एडाप्टर की आवश्यकता हो सकती, की तुलना में आप सिद्धांत

में विचार कर सकते है आप सिद्धांत वर्णन में पढ़ सकते हैं के रूप में:

सिद्धांत 2 एक ऑब्जेक्ट-रिलेशनल PHP 5.3.0+ के लिए मैपर (ORM) है जो PHP ऑब्जेक्ट्स के लिए पारदर्शी दृढ़ता प्रदान करता है। यह शक्तिशाली डेटाबेस अबास्ट्रक्शन परत (डीबीएएल) के शीर्ष पर बैठता है। ऑब्जेक्ट-रिलेशनल मैपर प्राथमिक कार्य पारदर्शी (PHP) ऑब्जेक्ट्स और संबंधपरक डेटाबेस पंक्तियों के बीच अनुवाद है।

+1

कृपया "बड़ा" परिभाषित करें :-) धन्यवाद – opHASnoNAME

+1

आपका उत्तर इंगित करता है कि ओआरएम का प्राथमिक लाभ डीबीएमएस पोर्टेबिलिटी है। लेकिन सादा पीडीओ - या वास्तव में कोई भी डीबीएएल - यह प्रदान करता है।मुझे लगता है कि ओआरएम का असली लाभ मॉडल के बीच खुद को और उनके निरंतरता/हाइड्रेशन को रिपोजिटरी से साफ अंतर है। –

0

Zend_DB और सिद्धांत विभिन्न तरीकों का उपयोग करता है। Zend_DB टेबल डेटा गेटवे और पंक्ति डेटा गेटवे की तरह काम करता है। सिद्धांत ऑब्जेक्ट मैपर है।

मेरे अनुभवों में Zend_DB सबसे आम कार्यों के लिए पर्याप्त और तेज़ है। सिद्धांत धीमा है और Zend_DB की तुलना में अधिक स्मृति का उपयोग करता है।

+0

मेरे अनुभव में एक कोड को बनाए रखना कठिन होता है जिसमें व्यापार तर्क और डेटा एक्सेस परत के बीच एक साफ अलगाव नहीं होता है। आप अपने मॉडल से निपटने के दौरान सक्रिय रिकॉर्ड समान पैटर्न का उपयोग करते हैं। उदाहरण के लिए, Zend_Db_Table_Row और Zend_Db_Table को विस्तारित करना या यहां तक ​​कि अपना स्वयं का डेटा मैपर और रिपॉजिटरीज़ (रिपोजिटरी पैटर्न) बनाना। यह निश्चित रूप से छोटी परियोजनाओं और टीमों के लिए है, मुझे लगता है। –