ruby on rails - पटरियों: आंशिक आवृत्ति चर के बारे में पता होना चाहिए?




ruby-on-rails partial (3)

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

अंततः यह एक डिज़ाइन पसंद है - और ईमानदारी से जब तक कि आप फ़ेसबुक चलाना नहीं चाहते हैं, तो आप ऐसा अतिरिक्त लुकअप करते हैं जो एक बड़ा सौदा नहीं है, लेकिन यह बहुत सूखा नहीं है।

पुनश्च: इसके बारे में सोचा - आप वास्तव में एक सहायक पद्धति में आंशिक रूप से कॉल करने के तरीके के बारे में सोच सकते हैं, इसलिए यदि आप अपनी आंशिक जरूरतों को बदलने के लिए कहते हैं - तो आपको एक स्थान को संशोधित करने की आवश्यकता है।

उदाहरण के लिए, रयान बेट्स 'निफ्टी_स्कॉफोल्डिंग, यह करता है

edit.html.erb

<%= render :partial => 'form' %>

new.html.erb

<%= render :partial => 'form' %>

_form.html.erb

<%= form_for @some_object_defined_in_action %>

यह छिपी स्थिति मुझे असहज महसूस करती है, इसलिए मैं आमतौर पर यह करना चाहता हूं

edit.html.erb

<%= render :partial => 'form', :locals => { :object => @my_object } %>

_form.html.erb

<%= form_for object %>

तो जो बेहतर है: क) आंशिक रूप से अभिगम उदाहरण चर का उपयोग करना है या ख) आंशिक सभी चर को जरूरत से गुजर रहा है?

मैं ख के लिए चयन कर रहा था) देर से, लेकिन मैं थोड़ा अचार में चला गया:

some_action.html.erb

<% @dad.sons.each do |a_son| %>
<%= render :partial => 'partial', :locals => { :son => a_son } %>
<% end %>

_partial.html.erb

The son's name is <%= son.name %>
The dad's name is <%= son.dad.name %>

बेटा पिताजी लाने के लिए बेटा डेटाबेस को कॉल करता है! इसलिए मुझे या तो @ डीएडी का उपयोग करना होगा, जो कि ए के लिए वापस जा रहे होंगे ) आंशिक एक्सेस उदाहरण चर वाले हैं या मुझे स्थानीय लोगों में @ डीएड पास करना होगा, बदलना बदलना होगा: आंशिक <% = रेंडर: आंशिक => 'आंशिक' ,: स्थानीय => {: पिता => @ दादा,: बेट => ए_एसन}%>, और कुछ कारणों से मेरे आंशिक रूप से वार्स के गुच्छा गुजरते हुए मुझे असहज महसूस होता है। शायद दूसरों को भी इस तरह से महसूस होता है

उम्मीद है कि कुछ मतलब बनाया इस पूरी चीज़ में कुछ अंतर्दृष्टि तलाश रहे हैं ... धन्यवाद!


रेल के हाल के संस्करणों में आंशिक रेंडर करने और स्थानीय लोगों को पास करने के लिए यह काफी आसान है। इसके अलावा।

<%= render :partial => 'form', :locals => { :item => @item } %>

तुम यह केर सकते हो।

<%= render 'form', :item => @item %>

मैं पीछे की संगतता रखने के लिए निफ्टी पाबंद जनरेटर में ऐसा नहीं करता, लेकिन मैं इसे भविष्य के रिलीज में बदलूंगा।

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

  1. आंशिक रूप से इसे साझा करने के लिए केवल एक उदाहरण चर नहीं बनाएं आमतौर पर इसका मतलब है कि आप केवल नियंत्रक संसाधन ऑब्जेक्ट को साझा करेंगे।

  2. यदि आंशिक संसाधन के समान नाम है, तो उसे स्थानीय रूप में <%= render @item %>

  3. यदि आंशिक कई नियंत्रकों में साझा किया जाएगा तो केवल स्थानीय लोगों का उपयोग करें

यह वैसे भी मेरे लिए अच्छी तरह से काम करता है।

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


आंशिक में @instance_variables का उपयोग खराब डिजाइन है

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

आंशिक रूप में उदाहरण चर का उपयोग करने के नकारात्मक पक्ष यह है कि आप अंशतः आंशिक गुंजाइश (युग्मन) के बाहर आंशिक रूप से निर्भरता बनाते हैं यह आंशिक कड़ी मे पुन: उपयोग करने के लिए बनाता है, और जब आप एक भाग में बदलाव करना चाहते हैं तो आवेदन के कई हिस्सों में परिवर्तन को लागू कर सकते हैं।

आंशिक जो उदाहरण चर का उपयोग करते हैं:

  • जब किसी भी नियंत्रक में आवृत्ति चर जो आंशिक परिवर्तनों का उपयोग करता है या तो आवृत्ति चर नाम या इसके प्रकार या डेटा संरचना का उपयोग करना चाहिए
  • सभी नियंत्रक क्रियाओं का कारण बनता है जो एक ही समय में आंशिक रूप में बदलने के लिए उपयोग करता है, जब उसमें परिवर्तन कैसे होता है उदाहरण चर
  • पुन: उपयोग को हतोत्साहित करते हैं, क्योंकि वे केवल उन क्रियाओं में आसानी से पुन: उपयोग किए जा सकते हैं, जो समान नाम और डेटा के साथ इंस्टेंस चर सेट करते हैं

इसके बजाय, स्थानीय लोगों को आंशिक रूप से पास करें:

<%= render 'reusable_partial', :item => @item %>

अब, क्योंकि आंशिक केवल संदर्भ item और @item नहीं, पुन: प्रयोज्य_पार्टी को प्रस्तुत करने वाले दृश्य को पुन: प्रयोज्य_पार्टी और अन्य कार्यों / दृश्यों को प्रभावित किए बिना बदलने के लिए स्वतंत्र है:

<%= render 'reusable_partial', :item => @other_object.item %>

इसके अलावा, इन संदर्भों में इसका पुन: उपयोग किया जा सकता है जहां कोई भी नहीं है @item:

<%= render 'reusable_partial', :item => @duck %>

यदि मेरा @duck भविष्य में बदलता है और फिर से पुन: प्रयोज्य_पार्टी जैसी @duck उम्मीद नहीं है (ऑब्जेक्ट के इंटरफ़ेस में परिवर्तन होता है), तो मैं एक एडाप्टर का उपयोग उस प्रकार के आइटम में भी कर सकता हूं जो पुन: प्रयोज्य-पार्टीियल की अपेक्षा करता है:

<%= render 'reusable_partial', :item => itemlike_duck(@duck) %>

हमेशा?

ऐसे बहुत सारे परिस्थितियां हैं जहां आपको संभवतः de-coupled partials की आवश्यकता नहीं है, और उदाहरण आवृत्ति का उपयोग करने के लिए शॉर्ट टर्म में यह आसान है। हालांकि, आपके आवेदन की भविष्य की आवश्यकताओं की भविष्यवाणी करना कठिन है।

जैसे, अपेक्षाकृत कम लागत वाला यह अच्छा सामान्य अभ्यास करता है





actionview