2010-08-16 13 views
8

कई एमवीसी परतों में उपयोग किए जाने वाले कार्यों की नियुक्ति के लिए सबसे अच्छा अभ्यास क्या है?"वैश्विक" सिम्फनी कार्यों को कहां रखा जाना चाहिए?

मुझे हाल ही में कुछ आंकड़े फ़ंक्शन लिखना पड़ा जो व्यू और मॉडल दोनों में उपयोग किए जाते हैं। अगर मैं उन्हें एक सहायक में डालता हूं, तो मैं मॉडल परत में लोडिंग हेल्पर्स फंस गया हूं, जो परेशान है, गलत लगता है, और जब उन कार्यों को किसी कार्य से कहा जाता है (क्योंकि कोई डिफ़ॉल्ट संदर्भ नहीं है) तो पूरी तरह टूट जाता है। यदि मैं उन्हें शीर्ष स्तर lib निर्देशिका में डालता हूं, तो मैं दृश्य में Stats::normalPercentile जैसे कॉल कर रहा हूं।

क्या कोई अन्य विकल्प हैं? क्या सिम्फनी देवों से कोई टिप्पणी है जहां इन तरह के कार्यों को रखा जाना चाहिए?

संपादित करें: स्पष्ट रूप से विचारों में स्थिर कॉल करने में कोई समस्या नहीं है। मैंने सिम्फनी के आधार पर इसका इस्तेमाल कक्षाओं के रूप में अपने सहायकों को नहीं लिखा (significant discussion के बाद भी।) उस स्थिति में, ऐसी फाइलें रखने के लिए कोई सम्मेलन हैं? बस उन्हें lib/util में फेंक दें?

उत्तर

7

आपके संपादन के संबंध में, सिम्फनी के हेल्पर्स इस तरह लिखे गए हैं कि सिंटैक्स के साथ दृश्य को छेड़छाड़ करने से बचने के लिए जो कम तकनीकी लोगों से अपरिचित हो सकता है जो सामान्य रूप से छोटे PHP के संपर्क में आते हैं - 'वेनिला' PHP में प्रथम श्रेणी के नागरिक होने के कार्य । यह रूबी ऑन रेल्स से खींचा गया एक दर्शन है, जिसने ढांचे के इस हिस्से को प्रेरित किया।

lib/ में फ़ाइलों को संग्रहीत करना एक व्यक्तिगत वरीयता है क्योंकि सिम्फनी वास्तव में दिमाग में नहीं है, लेकिन नामकरण lib/vendor/yourname का सुझाव देगा।

यदि वह अच्छा कोड है, आपको लगता है कि थोड़ा yourname निर्देशिका में चौकसी के साथ यह रक्षा करने के लिए चाहते हो सकता है ... अगर यह वास्तव में अच्छा कोड है, तो आप package it and share it with others :)

1

स्थिर कॉल के साथ क्या गलत है? मुझे लगता है कि यह सहायक कार्यों के लिए एकदम सही है (कार्यों के मुकाबले बेहतर है क्योंकि आपके पास नेमस्पेसिंग का एक प्रकार है)।

आंकड़ों को एक दृश्य में इकट्ठा करना काफी अजीब है। आप इसे किसी कार्रवाई में क्यों नहीं करते?

शायद सही उत्तर उस समस्या पर निर्भर करता है जिसकी आप हल करने की कोशिश कर रहे हैं (आपने यह नहीं समझाया कि वास्तव में आपके सहायकों को क्या करना चाहिए)। मैं आम तौर पर ऐसे कार्यों में ऐसे सहायकों का उपयोग करता हूं जिन्हें किसी भी अतिरिक्त कक्षा या कॉल की आवश्यकता नहीं होती है (जैसे "स्ट्रिपटेक्स्ट")।

+0

करना चाह सकते हैं मैं मानता हूँ: स्थिर कॉल के साथ कुछ भी गलत नहीं विचारों में यदि ओपी इसे पसंद नहीं करता है, तो वह एक सहायक बन जाएगा जो उन्हें मुखौटा करता है। – Maerlyn

+0

मैं दृश्य में आँकड़े एकत्र नहीं कर रहा हूं, लेकिन मैं मूल्य के प्रतिशत की तरह गणना कर रहा हूं। मुझे लगता है कि मैंने अनुमान लगाया है (गलत तरीके से) कि स्थिर कॉल दृश्य पर फंसे हुए थे क्योंकि सिम्फनी अपने सहायकों को कक्षाओं के अंदर नहीं रखता है। –

0

सांख्यिकीय गणना दृश्य से संबंधित नहीं है। उन्हें मॉडल परत में जोड़ने पर विचार करें। lib/util या lib/model दोनों मेरे लिए ठीक लगता है। उदाहरण के लिए यदि आप एक वर्ग PercentileSequence जो डेटा के साथ खिलाया दोनों अपने विचारों और इस तरह के कार्यों में पुन: उपयोग किया जा सकता है हो सकता है:

// in your action, component or task 
$this->mySequence = new PercentileSequence($data); 

// in your view (if PercentileSequence implements Iterator) 
<?php foreach ($mySequence as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 
// or use plain old array 
<?php foreach ($mySequence->getRanks() as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 

यह एक काम के भीतर ही होना चाहिए।

+0

कृपया प्रश्न के आधार पर बहस न करें। क्या आप ऐसे फ़ंक्शन की कल्पना कर सकते हैं जिसे मॉडल और दृश्य दोनों में बुलाया जाना चाहिए? अच्छा। यही मैं यहाँ के बारे में बात कर रहा हूँ।* यह विशिष्ट उदाहरण * पर विचार कर रहा है कि उनमें से एक मेरे प्रश्न से अलग हो रहा है। –

+0

शायद यही कारण है कि आप मॉडल परत में लोडिंग हेल्पर्स के साथ फंस गए हैं या स्थैतिक तरीकों को बुला रहे हैं :) वैसे भी, मैंने आपका प्रश्न उठाया। मुझे उम्मीद है कि कोई अच्छा जवाब देगा। – lunohodov

+0

मेरी प्रारंभिक प्रतिक्रिया थोड़ा कठोर था। यह मुद्दा मेरा पालतू शिखर है। मेरा विश्वास करो कि मैं जो कर रहा हूं वह उचित और आवश्यक दोनों है :) –

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