2010-04-28 9 views
19

मैं कई तरीकों मैं अपने नियंत्रकों कि लगता है कि वे बाहर निकाला जाना चाहिए और डाल एक पुन: प्रयोज्य वर्ग में, नियंत्रक के बाहर से फोन किया है। आम तौर पर लोग इस सामान को कहां रखते हैं? मुझे पता है कि मैं उन्हें अपने एप्लिकेशन कंट्रोलर में डाल सकता हूं, लेकिन अगर मुझे लगता है कि मैं बाद में अन्य तरीकों में इन विधियों का उपयोग कर सकता हूं तो यह एक अच्छा समाधान प्रतीत नहीं होता है।कहाँ रेल में नियंत्रकों द्वारा उपयोग के लिए पुन: प्रयोज्य तरीकों डाल करने के लिए

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

मैं जावा और Actionscript जहां मैं सिर्फ इस सामग्री के लिए नए util कक्षाएं बनाएंगे से आ रहा हूँ।/वर्ग है जो में मिलाया जा सकता है या नियंत्रकों द्वारा इस्तेमाल किया (और कुछ और, वास्तव में)

उत्तर

12

lib निर्देशिका एक जगह आप मॉड्यूल डाल सकते हैं। यह कोड डालने का एक स्थान हो सकता है जो अन्य क्षेत्रों में नहीं आता है (लेकिन यह सुनिश्चित करने के लिए सावधान रहें कि lib एक गड़बड़ में नहीं बदलता है)। साइड टिप्पणियां बस ध्यान में रखना:

  • तुम्हें पता है आपको लगता है कि, या, अन्य अनुप्रयोगों में इस्तेमाल किया जाएगा सकता है संबंधित कार्यक्षमता की एक बड़ी राशि है कि एक प्लगइन हो सकता है।

  • इसका भी ध्यान में रखते हुए एक मॉडल है कि एक सक्रिय रिकॉर्ड वस्तु नहीं है बनाने के साथ कुछ भी गलत नहीं है कि लायक। तो फिर, आपके पास जो कुछ है उसके आधार पर, यह भी समझ में आ सकता है।

+0

पीट दो अतिरिक्त अंक बहुत अच्छे हैं (आप, ज़ाहिर है, अभी भी उत्पादन में कुछ भी डालने से पहले सुनिश्चित करें कि सब कुछ सही ढंग से काम करता है बनाना चाहिए।)। मेरा मानना ​​है कि 'lib' "जेनेरिक लाइब्रेरी" तर्क के लिए है, डोमेन तर्क नहीं। इस प्रकार, यदि आपके पास कुछ तर्क है जो इस एप्लिकेशन के लिए विशिष्ट है लेकिन कई नियंत्रकों के लिए आम है, तो सही जगह 'ऐप/नियंत्रकों' निर्देशिका में एक अलग मॉड्यूल में हो सकती है। –

8

lib निर्देशिका में एक मॉड्यूल फ़ाइल बनाएँ:

module ControllerUtil 
    def foo 
    end 

    def bar 
    end 
end 

नियंत्रक में मॉड्यूल शामिल हैं:

class UsersController < ApplicationController 
    include ControllerUtil 
end 
1

नियंत्रकों चाहिए बहुत कम हो - मूल रूप से तर्क अंतर्ग्रहण और कुछ बहुत ही उच्च बनाने स्तर के निर्णय आप कुछ सहायक कार्यों कि सिर्फ बातें उस प्रकार के कर रहे हैं, लेकिन पुन: उपयोग किया जा करने के लिए नहीं जा रहे हैं, तो उन्हें नियंत्रक में रखते हुए, तो ऐसा करना सही है। बस उन्हें निजी के रूप में चिह्नित करना सुनिश्चित करें।

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

सामान्य में, हालांकि, अगर आप इन सहायकों के एक मुट्ठी भर से अधिक है, तो आप शायद बहुत ज्यादा अपने नियंत्रकों में कर रहे हैं। उन पर एक कड़ी नजर डालें और देखें कि उनमें से कुछ को आपके मॉडल का हिस्सा नहीं होना चाहिए।

11

आप app/modules निर्देशिका बना सकते हैं और में यह

module XYZUtils 
    def abc 
    end 

    def efg 
    end 
end 

e.g XYZUtils मॉड्यूल बना सकते हैं और के रूप में मॉड्यूल शामिल हैं और जब नियंत्रकों या मॉडल आदि में आवश्यक

include XYZUtils 

आप अलग अलग मॉडल या संस्थाओं

से संबंधित उपयोगिता कार्यों के लिए विभिन्न मॉड्यूल बना सकते हैं मैं /lib निर्देशिका पसंद नहीं करेगा क्योंकि कि इस परियोजना से संबंधित कोड होने चाहिए, न संबंधित ऐप्लिकेशन, जैसे कार्य आदि

मैं /app निर्देशिका में सभी अनुप्रयोग से संबंधित कोड रखना होगा ही

+1

इस उत्तर को पसंद करने वाले किसी भी व्यक्ति को @ एडबिल के उत्तर को और अच्छे कारणों के रूप में देखना चाहिए कि इस तरह के कोड को/lib में क्यों न डालें – rmcsharry

1

2014 से साहिल कालरा के ऊपर जवाब देने के लिए संबंधित:

रेल में अब app/controllers/concerns निर्देशिका है जहां आप सहायक विधियों से भरा मॉड्यूल डाल सकते हैं और आसानी से उन्हें अपने नियंत्रकों में शामिल या बढ़ा सकते हैं। मैंने बस अपने आवेदन_ नियंत्रक से बाहर की सभी तर्क-गहन विधियों की प्रतिलिपि बनाई और चिपकाया और उन्होंने बॉक्स के ठीक बाहर काम किया।

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