2010-01-30 11 views
7

मेरे पास निम्न मॉडल के साथ एक ऐप है: User, Task, और Assignment। प्रत्येक असाइनमेंट belongs_to उपयोगकर्ता और कार्य (या दूसरे शब्दों में, किसी कार्य को असाइनमेंट के माध्यम से किसी उपयोगकर्ता को असाइन किया जाता है)।रेल में एक नए मॉडल उदाहरण के निर्माण पर ईमेल भेजने का सबसे अच्छा तरीका?

एक बार कोई उपयोगकर्ता कार्य पूरा करने के बाद, असाइनमेंट को पूर्ण के रूप में चिह्नित किया जाता है, और ऐप तुरंत एक नया असाइनमेंट बनाता है (या दूसरे शब्दों में, किसी और को कार्य सौंपा जाता है)।

इस नए असाइनमेंट को बनाने के तुरंत बाद, मैं नए असाइनरी को एक ईमेल भेजना चाहता हूं। मुझे पता है कि मैं इसे तीन तरीकों से कर सकता हूं:

  1. स्पष्ट रूप से मेरे नियंत्रक में ईमेल भेजें।
  2. असाइनमेंट मॉडल पर कॉलबैक में ईमेल भेजें।
  3. असाइनमेंट मॉडल पर एक पर्यवेक्षक बनाएं और after_create में ईमेल भेजें।

इनमें से कौन से विकल्प लोगों को लगता है कि सबसे अच्छा है, और क्यों? # 1 मेरे लिए बुरा लगता है, क्योंकि मैं इसे हर कार्य में भेजने के लिए याद रखना नहीं चाहता जो असाइनमेंट पूरा कर सके। मैंने सुना है कि कुछ लोग कहते हैं कि रेल पर्यवेक्षक खराब हैं और उन्हें टालना चाहिए, लेकिन मुझे यकीन नहीं है कि वे लोग हैं या नहीं, मुझे भरोसा करना चाहिए या नहीं। कोई अन्य राय?

उत्तर

3

आप सही हैं, पहला तरीका एक अच्छा दृष्टिकोण नहीं है। कुछ कारणों से पर्यवेक्षकों को जाने का मेरा पसंदीदा तरीका है।

सबसे पहले, यदि आप टीडीडी (टेस्ट-संचालित विकास) का उपयोग करते हैं तो आप पर्यवेक्षकों को एक मेलर निर्माण से बाहर निकलने के बिना हर सृजन के मॉडल का अधिक परीक्षण करने के लिए बंद कर सकते हैं। फिर आप मेलर और पर्यवेक्षक को अलग से परीक्षण कर सकते हैं।

दूसरा, कॉलबैक को अलग करने का विचार क्लीनर कोड बनाता है। कॉलबैक वास्तव में आपके मॉडल का हिस्सा नहीं हैं, वे घटनाएं हैं। आपके मॉडल में खुद को चलाने के लिए आवश्यक कार्यों और विशेषताओं को शामिल किया गया है, और कॉलबैक (पर्यवेक्षकों के साथ लागू) अलग ईवेंट हैंडलर हैं।

उसने कहा, मुझे नहीं लगता कि आपका दूसरा विकल्प "खराब" या कम पेशेवर है।किसी भी तरह से जब तक यह नियंत्रक या (यहां तक ​​कि बदतर) विचारों के बजाय, मॉडल स्तर पर तब तक काम करता है।

+0

टीडीडी चीज पर्यवेक्षकों का उपयोग करने का एक शानदार कारण है। जब तक कोई अधिक आकर्षक बिंदु नहीं बनाता है, तो मैं जल्द ही आपको बंद कर दूंगा। – jakeboxer

1

मैं पर्यवेक्षकों के लिए जाने के रूप में वे अपने मॉडल/नियंत्रक कोड में अव्यवस्था को कम करने और मैं उन्हें का उपयोग करने में कोई नकारात्मक पहलू के बारे में सोच सकते हैं ...

iirc भेजने के लिए एक ईमेल के बाद ईमेल को बचाने के सक्रिय में भी एक उदाहरण है रिकॉर्ड पर्यवेक्षक दस्तावेज़

+0

हाँ मैं इसे देखा था की तरह है, और कहा कि कारणों मैंने पूछा में से एक है। हालांकि, कुछ लोगों ने मुझे पर्यवेक्षकों से बचने के लिए कहा, इसलिए मैं कुछ और राय प्राप्त करना चाहता था। – jakeboxer

+0

अगर पर्यवेक्षकों के साथ कोई समस्या है तो मुझे भी दिलचस्पी होगी! – roman

+0

उन्होंने जो कारण दिया वह यह था कि कुछ भी पर्यवेक्षकों का सीधे संदर्भ नहीं देता है, इसलिए कोड देखने वाले नए लोग उन्हें नोटिस नहीं कर सकते हैं। यह मेरे लिए कुछ कमजोर कारण प्रतीत होता है, और एक खराब कोड गंध की तुलना में डेवलपर के रेल ज्ञान में छेद का अधिक संकेतक है, लेकिन मैं अभी भी उनसे अधिक अनुभवी लोगों की राय सुनना चाहता हूं। – jakeboxer

0

आप चीजों का संयोजन भी कर सकते हैं। आप एक क्रिया के लिए पर्यवेक्षकों का उपयोग कर सकते हैं, और यदि एक अन्य कार्रवाई के लिए केवल एक ही ईमेल है तो आप इसके लिए विकल्प # 1 का उपयोग कर सकते हैं।

क्या आपने act_as_state_machine, या किसी अन्य समान समाधान के बारे में सुना है?

http://github.com/rubyist/aasm

वे आप प्रत्येक वस्तु और अलग अलग बातें है कि राज्य में परिवर्तन के साथ भी हो सकता है के एक राज्य को परिभाषित करने के लिए अनुमति देते हैं।

इससे आपको बहुत अधिक तर्क मिल सकता है जब आपको चीजें भेजी जाती हैं, अगर आपको इसकी आवश्यकता होती है। अधिक हो सकता है, लेकिन वास्तव में आसान हो सकता है। मेरा सुझाव है क्योंकि जब कोई कार्य 'पूरा' होता है तो आपको एक ईमेल भेजा जाता है जो ऐसा लगता है कि यह आपके कार्य मॉडल में राज्य या स्थिति कॉलम का एक प्रकार हो सकता है।

+0

यह अच्छा लग रहा है, और मैं निश्चित रूप से इसे ध्यान में रखूंगा। हालांकि इस पल के लिए, यह निश्चित रूप से अधिक है। हालांकि धन्यवाद। – jakeboxer

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

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