2009-11-17 24 views
5

क्या कोई शायद यहां समझा सकता है कि क्यों पृथ्वी पर केकपीएचपी के पास डीबी टेबल और नियंत्रकों और मॉडलों के लिए एकवचन के लिए बहुवचन नामों का उपयोग करने का एक सम्मेलन है? हमेशा एकवचन शब्द, या हमेशा बहुवचन का उपयोग क्यों नहीं करते? मेरे लिए यह हमेशा सोचने में भ्रमित लगता है "अब मैं बहुवचन या एकवचन का उपयोग करता हूं?" (या याद रखने का कोई आसान तरीका है ??) और फिर आपके पास शामिल-टेबल हैं जो दोनों के संयोजन का उपयोग करते हैं!केकपीएचपी विभिन्न बहुवचन/एकवचन नामकरण सम्मेलनों का उपयोग क्यों करता है?

मुझे लगता है कि कहीं अच्छा कारण है, लेकिन बस इसमें नहीं आया है।
(मैं वास्तव में यह सिर्फ इसलिए कि रूबी-ऑन-रेल कि जिस तरह से काम करता है नहीं है उम्मीद है।)

साइमन।

+2

यह शायद रेल पर रूबी की वजह से है :) –

+1

कोई विचार नहीं। हम हमेशा 'नाम', 'टेबल', और 'प्राथमिक के' वैकल्पिक फ़ील्ड्स (मॉडल डॉक्स देखें) का उपयोग उन चीजों को नाम देने के लिए करते हैं जिन्हें हम चाहते हैं। हम चाहते हैं कि हम क्या चाहते हैं, जब हम चाहते हैं, और सब कुछ एकवचन छोड़ दें। इसके अलावा, हालांकि, मुझे वास्तव में केक पसंद है। – nilamo

+0

यह भी हो सकता है क्योंकि केकपीएचपी उन लोगों द्वारा डिजाइन किया गया था जो परिभाषा के अनुसार असंगत PHP का उपयोग करते हैं। –

उत्तर

10

CakePHP Conventions

CakePHP के सम्मेलनों वेब विकास अनुभव और सर्वोत्तम प्रथाओं के वर्षों से बाहर आसुत किया गया है। जबकि हम सुझाव देते हैं कि आप केकपीएचपी के साथ विकास करते समय इन सम्मेलनों का उपयोग करें, हमें यह उल्लेख करना चाहिए कि इनमें से कई सिद्धांतों को आसानी से ओवरराइड किया गया है - जो विरासत प्रणाली के साथ काम करते समय विशेष रूप से आसान है।

मुझे लगता है कि विचार इसे पढ़ने और सही तरीके से तत्वों के बारे में सोचने के लिए अधिक धाराप्रवाह बनाना है। डेटाबेस टेबल हमेशा बहुवचन होते हैं, क्योंकि उनमें कई रिकॉर्ड होते हैं। मॉडल एकवचन है, क्योंकि आपको इसके साथ एक रिकॉर्ड खोजने के बारे में सोचना चाहिए। model_id के लिए एक चुनिंदा फ़ील्ड स्वचालित रूप से $models से अपने विकल्पों को प्राप्त करेगा, क्योंकि आप कई में से एक का चयन करते हैं।

$model = $this->Model->find('first'); // reads like English 
$model = $this->Models->find('first'); // slightly trips you up 

$models = $this->Model->find('all'); // works okay 
$models = $this->Models->find('all'); // more logical, but "this models" still trips 

यह हमेशा सही नहीं होता है, लेकिन मुझे लगता है कि इसका उपयोग करने के बाद यह एक अच्छा सम्मेलन है। मैं देख सकता हूं कि शुरुआत में यह कैसे भ्रमित हो सकता है।

+2

सहमत हुए। मॉडल आपके डेटा मोड के लिए एक अमूर्त है, और अंग्रेजी में वे हमेशा एकवचन होते हैं (आप "कारों का सार क्या नहीं है") नहीं कहते हैं। नियंत्रक अमूर्तता के कई उदाहरणों को संभालता है (यह उन सभी को झगड़ा करता है)। आईएमओ यह अंग्रेजी के साथ चीजों को कैसे करता है इसके साथ यह काफी संगत है। –

4

क्या याद रखने का एक आसान तरीका है?

हाँ, भागों जहां नामकरण सम्मेलन में गिना जाता है (db/मॉडल/नियंत्रक) ... यदि यह एक मॉडल (यानी। User) या एक विदेशी कुंजी (यानी के नाम के नाम पर नहीं है के संबंध में। user_id), तो यह बहुवचन है। सब कुछ मूल रूप से उन दो चीजों के अलावा बहुवचन है।