Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

जब एक एक्टिवरेकॉर्ड मॉडल बहुत भारी हो जाता है: जटिलता को पहचानना और प्रबंधित करना

जब आप रेल्स ब्लॉग और किताबें पढ़ते हैं, या कॉन्फ्रेंस वार्ता देखते हैं, तो आप अपने मॉडल को पतला बनाने के बारे में बहुत कुछ सीखेंगे।

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

पतला। लेकिन बहुत पतला नहीं।

एक्टिव रिकॉर्ड एक पैटर्न है जो सबसे अच्छा काम करता है जब आपके मॉडल आपके डेटाबेस स्कीमा से निकटता से मेल खाते हैं। यह इसके लिए डिज़ाइन किया गया है! लेकिन इसका क्या मतलब है?

  • यदि कुछ कोड एक्टिवरेकॉर्ड मॉडेल के दृष्टिकोण से काम करता है, तो यह मॉडल में जा सकता है।

  • यदि कुछ कोड काम करता है जो कई टेबल्स/ऑब्जेक्ट्स तक फैला हुआ है, और जिसका वास्तव में कोई स्पष्ट मालिक नहीं है, तो यह सर्विस ऑब्जेक्ट में जा सकता है।

  • कुछ भी जो विशेषता जैसा है (जैसे एसोसिएशन या अन्य विशेषताओं से गणना की गई विशेषताएं) आपके एक्टिवरेकॉर्ड मॉडल में जाना चाहिए।

  • यदि आपके पास तर्क है जो एक साथ कई मॉडल को सहेजने या अपडेट करने का आयोजन करता है, तो यह एक्टिवमॉडल फॉर्म ऑब्जेक्ट में जाना चाहिए।

  • यदि कोड मुख्य रूप से व्यू में मॉडल को प्रदर्शित या फॉर्मेट करने के लिए है, तो यह रेल्स हेल्पर या प्रेजेंटर में जाना चाहिए।

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

तो, चूंकि रेल्स ने एक्टिव रिकॉर्ड पैटर्न को चुना, इसलिए आपके मॉडल में कुछ तर्क होना समझ में आता है। लेकिन रेल्स ने उस पैटर्न को कुछ क्लीनर के बजाय क्यों चुना?

रूबी क्या करेगी?

Patterns of Enterprise Application Architecture में, एक्टिव रिकॉर्ड पैटर्न रो डेटा गेटवे और डेटा मैपर के बीच मध्य मैदान रखता है। रो डेटा गेटवे टेबल रो के चारों ओर एक ज्यादातर बेवकूफ ऑब्जेक्ट-ओरिएंटेड रैपर है, जैसे सभी संभावित मॉडल में सबसे पतला। डेटा मैपर्स एक्टिव रिकॉर्ड से अधिक जटिल हैं, और ज्यादातर केवल व्यावसायिक तर्क वाले ऑब्जेक्ट्स और केवल पर्सिस्टेंस तर्क वाले ऑब्जेक्ट्स के बीच परिवर्तित करने के लिए उपयोग किए जाते हैं।

तो, रूबी के संदर्भ में, एक्टिव रिकॉर्ड बिल्कुल सही डिफ़ॉल्ट पैटर्न है।

मैं ऐसा क्यों कहता हूं?

रूबी को प्रोग्रामर्स को खुश करने के लिए डिज़ाइन किया गया है। जब इसे क्लीननेस और सुविधा के बीच ट्रेडऑफ बनाने के लिए मजबूर किया जाता है, तो यह लगभग हमेशा सुविधा चुनता है।

मेरा मतलब है, Array के पब्लिक API में सौ से अधिक मेथड हैं। इसमें एक टन मेथड हैं जो एक दूसरे के सिर्फ एलियास हैं। क्योंकि कुछ डेवलपर्स सिर्फ .detect लिखना .find से पसंद करते हैं।

उस संदर्भ में, यह बहुत मायने रखता है कि रेल्स एक ऐसे पैटर्न को डिफ़ॉल्ट करेगा जो अधिक लचीलेपन या अधिक ऑब्जेक्ट-ओरिएंटेड शुद्धता वाले पैटर्न की तुलना में सुविधाजनक है। यह रूबी तरीका है। और मुझे यह पसंद है।

जब आपको आवश्यकता हो तो आप हमेशा कुछ अधिक लचीले में रिफैक्टर कर सकते हैं। लेकिन फिर, YAGNI।

  1. Django में मॉडल्स में डेटा इम्पोर्ट करना Django में मॉडल्स में डेटा इम्पोर्ट करना

    इस लेख में, हम देखेंगे कि JSON फॉर्मेट से मॉडल में डेटा कैसे इम्पोर्ट किया जाए। हम JSON, CSV, XLSX, YML आदि से मॉडल में डेटा इम्पोर्ट कर सकते हैं। सबसे पहले, एक Django प्रोजेक्ट और एक ऐप बनाएं। urls सेट करें और INSTALLED_APPS में ऐप जोड़ने जैसे कुछ बुनियादी काम करें। एक मॉडल बनाएं। यहां, हमें views

  1. Django में मॉडल्स डेटा एक्सपोर्ट करना Django में मॉडल्स डेटा एक्सपोर्ट करना

    इस लेख में, हम देखेंगे कि मॉडल डेटा को .csv फॉर्मेट में कैसे एक्सपोर्ट किया जाए। कभी-कभी, आपको अपने मॉडल डेटा को .csv या json या .xlsx जैसे विभिन्न फॉर्मेट्स में आगे के काम या रिपोर्टिंग के लिए एक्सपोर्ट करने की आवश्यकता हो सकती है। आप इसके लिए किसी प्रकार का स्क्रिप्ट बना सकते हैं लेकिन मेरे पास इ

  1. टेंसरफ्लो/केरस में Sequential मॉडल कब उपयोग करें: उदाहरण सहित टेंसरफ्लो/केरस में Sequential मॉडल कब उपयोग करें: उदाहरण सहित

    Sequential मॉडल के उपयुक्त उपयोग मामले साधारण लेयर स्टैक (एक इनपुट, एक आउटपुट प्रति लेयर)। कोई लेयर शेयरिंग नहीं। कोई बहु-इनपुट/बहु-आउटपुट नहीं। कोई गैर-रैखिक टोपोलॉजी (Residual, Inception, आदि) नहीं। उदाहरण: तीन लेयर्स वाला Sequential मॉडल परिभाषित करना import tensorflow as tf from tenso