MVC: पूरी तरह से आबादी वाले मॉडल या आंशिक रूप से भरे हुए मॉडल?


10

इसने मुझे बहुत समय से परेशान किया है। MVC प्रोग्रामिंग करते समय आपको क्या लगता है कि बेहतर प्रोग्रामिंग अभ्यास क्या है? क्या पूरी तरह से आबादी वाले मॉडल या आंशिक रूप से भरे हुए लोगों का उपयोग करना चाहिए, खासकर जब मुझे पता है कि इस विशेष कार्य के लिए मुझे मॉडल ऑब्जेक्ट से केवल 2 फ़ील्ड की आवश्यकता है जिसमें 5 अन्य हैं?

कभी-कभी डेटाबेस से सभी मानों के साथ 20 मॉडल ऑब्जेक्ट्स की सूची को भरना केवल आपराधिक लगता है जब आपको पता चलता है कि आपको उनमें से कुछ की ही आवश्यकता है।

बेशक आंशिक मॉडल का मतलब है कि आपको अपने डीएओ में एक और विधि लिखनी होगी इसके अलावा जो सब कुछ प्राप्त करता है। कौन से कोड को बनाए रखने के लिए अधिक मतलब है?

दूसरी ओर पूरी तरह से आबादी वाले मॉडल के साथ DB से सब कुछ खींचने का मतलब है कि एक तरीका सभी को कार्य करता है लेकिन यह स्पष्ट रूप से आपको कुछ प्रदर्शन ओवरहेड देने वाला है।

मैं ORM (जैसे हाइबरनेट या रेल्सकॉर्ड ऑफ रेल्स) को MVC प्रोग्रामिंग के पक्ष में देख सकता हूं और Google के बिगटेबल पूर्ण मॉडल जैसे डेटाबेस स्वीकार किए जाते हैं। लेकिन क्या होगा यदि आप अभी भी पुराने पुराने JDBC का उपयोग कर रहे हैं?

हार्डवेयर सस्ता है, विकास महंगा है। क्या यह वास्तव में तब भी सही है जब ऐप को प्रति घंटे कुछ सौ हज़ार अनुरोधों के पैमाने की आवश्यकता हो?


1
"दूसरी तरफ पूरी तरह से आबादी वाले मॉडल के साथ DB से सब कुछ खींचने का मतलब है कि एक तरीका सभी को कार्य करता है, लेकिन यह स्पष्ट रूप से आपको अपने प्रदर्शन को ऊपर ले जाने वाला है।" वास्तव में? क्या आपने इस अभ्यास से कोई प्रदर्शन ओवरहेड मापा है?
एस.लॉट

>> सच? क्या आपने इस अभ्यास से कोई प्रदर्शन ओवरहेड मापा है? << - मैंने इसकी उम्मीद की थी। नहीं, मैंने नहीं किया है। लेकिन यह मापना दिलचस्प होगा और अन्यथा गलत साबित होगा।
प्रीतम बरते

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

1
मुझे एक उत्कृष्ट लेख मिला है जो आपके डोमेन मॉडल को उजागर करने के सवाल को शामिल करता है । एमएसडीएन.माइकोमाइकल . com / en-us / magazine / ee236638.aspx पर डीटीओ भेजना
मेयो

जवाबों:


3

आपके पास दो विकल्प हैं:

1) मॉडल में कुछ क्षेत्रों को अधूरा छोड़ दें

2) अपनी विशिष्ट स्थिति के लिए एक अतिरिक्त "लाइट" मॉडल बनाएं

किसे चुनना है यह दो बातों पर निर्भर करता है:

क) "पूर्ण" मॉडल के कितने क्षेत्रों को अनदेखा किया जा रहा है

ख) यह "लाइट" मॉडल कितनी बार त्वरित किया जाएगा

यदि बस कुछ जोड़े या अधिक क्षेत्र हैं जो अनफिल किए जा सकते हैं, तो 1 के साथ जाना ठीक है)।

यदि बी) केवल एक असाधारण व्यक्तिगत स्थिति है, तो केवल एक उपयोग के मामले के लिए एक अतिरिक्त मॉडल बनाने का कोई मतलब नहीं है।

एक अन्य दृष्टिकोण "लाइट" मॉडल को परिभाषित करना है और इसे "पूर्ण" मॉडल से विरासत में मिला है।


जवाब के लिए धन्यवाद। यह जरूरत के आधार पर एक लाइट मॉडल बनाने के लिए समझ में आता है। लेकिन कभी-कभी मुझे आश्चर्य होता है कि इस तरह की रणनीति बहुत सारे मॉडल वर्ग नहीं बनाएगी? खासकर अगर मैं मॉडल को व्यावसायिक तर्क के लिए विशिष्ट मॉडल के बजाय विचारों के लिए विशिष्ट बना रहा हूं।
प्रीतम बरते

3

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

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

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

हार्डवेयर सस्ता है, लेकिन हार्डवेयर की कोई भी राशि खराब डिज़ाइन को अच्छा प्रदर्शन नहीं कर सकती है।


2
>> अगर आपके विचार में मॉडल से केवल 2 गुणों की आवश्यकता है तो आपके पास गलत मॉडल है! << - हमेशा कीड़ा मत बनो। विशिष्ट मामला व्यावसायिक अनुप्रयोगों में खोज परिणामों की सूची दिखा रहा है। एक CRM में उदाहरण के लिए - ग्राहक - ज्यादातर एक खोज सूची में केवल नाम और एक या 2 महत्वपूर्ण क्षेत्र दिखाएगा। लेकिन CRM के पास उस ग्राहक से जुड़े कुछ अन्य क्षेत्र होंगे।
प्रीतम बरते

1
प्रश्न कहता है कि इस मामले में केवल 2 गुणों की आवश्यकता है।
स्टीव

-2

मॉडल एक डीएओ नहीं है।

और दूसरी बात: यदि आप कहते हैं कि आपके पास 20 मॉडल हैं (ग्राहक, आपके उदाहरण से), तो वह कोई एमवीसी मॉडल नहीं है। डोमेन मॉडल सीधे एकल तालिका पंक्ति में मैप नहीं होता है । इसके बजाय यह आपके "ग्राहकों" के साथ किए गए सभी कार्यों के लिए जिम्मेदार होना चाहिए।

आपके उदाहरण में, "ग्राहक" एक डोमेन मॉडल नहीं है, लेकिन मॉडल के अंदर सिर्फ एक वस्तु है।

डेटाबेस के साथ बातचीत के लिए, उस जिम्मेदारी को एक डेटा मैपर ऑब्जेक्ट को सौंप दिया जाना चाहिए, जिसे पता होना चाहिए कि ग्राहक वर्ग के अपने उदाहरणों को कैसे संग्रहीत करें और प्राप्त करें।


PS यदि आपके पास मॉडल के अंदर डेटाबेस लॉजिक है, तो यह डोमेन बिजनेस लॉजिक को कंट्रोलर में धकेल देगा।
मेफिस्टो

1
एक वर्ग जो ग्राहकों के लिए सब कुछ करता है वह एक बुरा विचार है क्योंकि इसे बनाए रखना मुश्किल होगा।
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.