2011-06-24 5 views
36

मुझे आश्चर्य है कि कोई विशिष्ट प्रोग्रामिंग सिद्धांत (डेमेटर?) है जो इस विचार का समर्थन करता है कि रेल मददगारों को नियंत्रक आवृत्ति चर का कभी भी उपयोग नहीं करना चाहिए, बल्कि उन्हें फ़ंक्शन पैरामीटर के रूप में ऐसे चर प्राप्त करना चाहिए। उदाहरण के लिए, मान लें कि मेरी ChickensController#squawk एक्शन एक उदाहरण चर बनाता है जिसे @egg कहा जाता है। इसके अलावा, यह मान squawk दृश्य एक सहायक cockadoodledoo कहा जाता है के लिए एक कॉल, इसलिए तरह कार्यान्वित शामिल हैं: @egg एक पैरामीटर के रूप पारित करने के लिए, इस तरह के उस दृश्य कॉल cockadoodledoo(@egg)क्या रेल मददगार मानते हैं कि एक आवृत्ति चर मौजूद है या क्या उन्हें उन्हें पैरामीटर के रूप में प्राप्त करना चाहिए?

def cockadoodledoo 
    @egg.to_s 
end 

बेहतर या अनावश्यक रूप से अत्यधिक शब्द होगा और सहायक के लिए समान:

def cockadoodledoo(egg) 
    egg.to_s 
end 

मुझे आशा है कि आप में से एक खुश हैकर्स एक जवाब का दावा करने की एक शुक्रवार की दोपहर पर पर्याप्त ऊब है। Cockadoodledoo!

This question here is similar, but was never accurately answered.

+0

ओहोह बहुत अच्छे जवाब और देने के लिए केवल एक चेकमार्क .... सभी को धन्यवाद। – ybakos

उत्तर

29

उन्हें एक परम के रूप में प्राप्त करें। अन्यथा, जैसे-जैसे ऐप बढ़ता है, यह पता लगाने में बहुत मुश्किल हो जाती है कि रिफैक्टरिंग, समस्या निवारण इत्यादि के दौरान इंस्टेंस वर्र्स सेट किए जा रहे हैं, जहां

इसके अलावा, मेरा मानना ​​है कि प्रारंभिक में केवल उदाहरणों में उदाहरण के उदाहरणों का उपयोग करने के लिए एक सामान्य सर्वोत्तम अभ्यास है टेम्पलेट ... और वहां से आपको varers को हेल्पर्स और अन्य आंशिक रूप से पास करना चाहिए।

+0

कोई भी जानता है कि इस सर्वोत्तम अभ्यास का उल्लेख किया गया है या इसका नाम क्या है? – ybakos

+2

सर्वोत्तम प्रथाओं को प्रकाशित करना और नामकरण करना '90s है ... –

+5

फैबियो, मैं असहमत हूं।निश्चित रूप से हम आर्ट ऑफ प्रोग्रामिंग में draconian नियमों को लागू नहीं करना चाहते हैं, लेकिन चीजों का नामकरण में बहुत बढ़िया मूल्य है। उदाहरण के लिए, "डीआरवाई सिद्धांत"। – ybakos

16

मैं कहना चाहता हूँ कि आप हमेशा 2 कारणों से अपने सहायक को स्पष्ट रूप से चर पारित करना चाहिए: आप नियंत्रित आप वास्तव में क्या करना

  • सब से ऊपर

    • , आप अपने सहायक का परीक्षण कर सकते

  • +3

    मैंने टेस्टेबिलिटी के बारे में नहीं सोचा था। ओह, क्या मैं बस अपने पैंट के साथ पकड़ा गया? (हाँ, मुझे और परीक्षण लिखना चाहिए।) – ybakos

    +0

    सहायक का परीक्षण करने की क्षमता में सुधार करना महत्वपूर्ण है। इसे स्पष्ट रूप से कॉल करने के लिए धन्यवाद। – kries

    7

    के बाद से सहायक संदेश (आंशिक और लेआउट सहित) सभी विचारों के लिए, सभी नियंत्रकों के लिए मिलाया जाता है इसलिए उपलब्ध है, यह हमेशा एक स्पष्ट अनुबंध स्थापित करने के लिए बुद्धिमान है पैरामीटर।

    एकमात्र अपवाद जो मैं सोच सकता था वह है जब एक आवृत्ति चर सभी दृश्यों और नियंत्रकों के लिए भी उपलब्ध है, जैसे मेनू या कुछ समान।

    +0

    अपवाद क्यों? – ybakos

    +2

    कोई कारण नहीं, मैं बस एक खोजने के लिए कड़ी मेहनत कर रहा था (आपको पता है, हर नियम में अपवाद है), लेकिन मुझे लगता है कि मैंने बहुत कठिन धक्का दिया होगा। –

    11

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

    <%= cockadoodledoo @egg %> 
    

    और:

    <% @eggs.each do |egg| %> 
        <%= cockadoodledoo egg %> 
    <% end %> 
    

    के रूप में एक विशेष cockadoodledoo कि इसके बजाए एक ही @egg से @eggs में एक सूची संभालती शुरू करने के बिना उम्मीद कार्य करेगा जब आप फिर दोनों एक तर्क गुजरती हैं।

    +2

    यह कुछ मुफ्त बहुमुखी प्रतिभा का एक अच्छा उदाहरण है, धन्यवाद। – ybakos