जब आप रेल ब्लॉग और किताबें पढ़ते हैं, या सम्मेलन वार्ता देखते हैं, तो आप अपने मॉडलों को पतला बनाने के बारे में बहुत कुछ सीखेंगे।
ये तकनीक कमाल की हैं, क्योंकि आपके मॉडल करेंगे संभालने के लिए बहुत बड़ा या जटिल हो जाना। लेकिन क्या आप वास्तव में अपने मॉडल को केवल दृढ़ता, संघों और सत्यापन के लिए जिम्मेदार ठहराना चाहते हैं? आप कैसे तय करते हैं कि आपके ActiveRecord मॉडल में कितना तर्क रहना चाहिए?
पतला। लेकिन भी नहीं पतला।
सक्रिय रिकॉर्ड एक पैटर्न है जो सबसे अच्छा काम करता है जब आपके मॉडल आपके डेटाबेस स्कीमा से निकटता से मेल खाते हैं। यही इसके लिए बनाया गया है! लेकिन इसका क्या मतलब है?
-
अगर कुछ कोड ActiveRecord मॉडल के दृष्टिकोण से काम करता है, तो वह मॉडल में जा सकता है।
-
अगर कुछ कोड काम करता है जो कई टेबल/ऑब्जेक्ट्स तक फैला है, और वास्तव में एक स्पष्ट मालिक नहीं है, तो यह सर्विस ऑब्जेक्ट में जा सकता है।
-
विशेषता जैसी कोई भी चीज़ (जैसे संबद्धता या अन्य विशेषताओं से गणना की गई विशेषताएँ) आपके ActiveRecord मॉडल में जानी चाहिए।
-
यदि आपके पास तर्क है कि एक साथ कई मॉडलों की बचत या अद्यतन को व्यवस्थित करना है, तो इसे एक ActiveModel प्रपत्र ऑब्जेक्ट में जाना चाहिए।
-
यदि कोड मुख्य रूप से एक दृश्य में मॉडल प्रदर्शित करने या स्वरूपित करने के लिए है, तो उसे रेल सहायक या प्रस्तुतकर्ता के पास जाना चाहिए।
उन दिशानिर्देशों से परे, आपको उन्हीं नियमों का उपयोग करना चाहिए जिनका उपयोग आप किसी भी वर्ग को रिफैक्टर करने के लिए करते हैं जो बहुत बड़ा हो रहा है। लेकिन आम तौर पर, आपको कुछ . को छोड़ने के बारे में बुरा नहीं मानना चाहिए आपके ActiveRecord मॉडल में तर्क। वे इसे पाने के लिए हैं!
इसलिए, चूंकि रेल ने सक्रिय रिकॉर्ड पैटर्न चुना है, इसलिए आपके मॉडल में कुछ तर्क होना समझ में आता है। लेकिन रेल ने कुछ क्लीनर के बजाय उस पैटर्न को क्यों चुना?
रूबी क्या करेगी?
एंटरप्राइज़ एप्लिकेशन आर्किटेक्चर के पैटर्न में, सक्रिय रिकॉर्ड पैटर्न रो डेटा गेटवे और डेटा मैपर के बीच मध्य आधार रखता है। पंक्ति डेटा गेटवे टेबल पंक्तियों के चारों ओर अधिकतर गूंगा ऑब्जेक्ट-ओरिएंटेड रैपर है, जैसे सभी संभावित मॉडलों में सबसे पतला। डेटा मैपर सक्रिय रिकॉर्ड्स की तुलना में अधिक जटिल हैं, और अधिकतर उन वस्तुओं के बीच कनवर्ट करने के लिए उपयोग किए जाते हैं जिनमें व्यावसायिक तर्क के अलावा कुछ भी नहीं होता है और वस्तुओं में दृढ़ता तर्क के अलावा कुछ भी नहीं होता है।
तो, रूबी के संदर्भ में, सक्रिय रिकॉर्ड बिल्कुल सही डिफ़ॉल्ट पैटर्न है।
मैं ऐसा क्यों कह रहा हूँ?
रूबी को प्रोग्रामर को खुश करने के लिए डिज़ाइन किया गया है। जब इसे सफाई और सुविधा के बीच समझौता करने के लिए मजबूर किया जाता है, तो यह लगभग हमेशा सुविधा चुनता है।
मेरा मतलब है, Array
इसके सार्वजनिक एपीआई में सौ से अधिक तरीके हैं। इसका टन . है उन तरीकों के बारे में जो सिर्फ एक दूसरे के उपनाम हैं। क्योंकि कुछ डेवलपर केवल .detect
writing लिखना पसंद करते हैं करने के लिए .find
।
उस संदर्भ में, यह बहुत मायने रखता है कि रेल एक ऐसे पैटर्न के लिए डिफ़ॉल्ट होगा जो कि अधिक लचीला है, या अधिक वस्तु-उन्मुख शुद्धता है। यह रूबी तरीका है। और मुझे यह पसंद है।
जब आपको आवश्यकता हो तो आप हमेशा कुछ अधिक लचीले होने के लिए रिफैक्टर कर सकते हैं। लेकिन फिर, यागनी।