model-view-controller - एमवीसी:डेटा मॉडल और मॉडल देखें




separation-of-concerns (7)

ऐसा लगता है कि मेरे पास नियमों का भी नकल है।

अर्थात। यूआई पर क्लाइंट ऑब्जेक्ट सत्यापन, फिर डोमेन ऑब्जेक्ट पर मैपिंग जिसे सत्यापित किया जाना है।

मैं जो करना चाहता हूं वह मॉडल बनाने के लिए डोमेन ऑब्जेक्ट्स का सेट सेट है - यानी। एक वेबपृष्ठ जो ग्राहक की जानकारी, स्टॉक जानकारी इत्यादि दिखाता है ... मेरा मॉडल एक संरचना बन जाता है जिसमें ग्राहक वस्तु और स्टॉक ऑब्जेक्ट होता है।

CompanyPageModel

सार्वजनिक ग्राहक ग्राहक {प्राप्त;} सार्वजनिक स्टॉक स्टॉक {प्राप्त;}

फिर मेरे एमवीसी प्रोजेक्ट में ViewData.Model.Customer.Name ViewData.Model.Stock.CurrentStocks

पृथक्करण 'अधिक' काम की तरह लगता है, लेकिन बाद में, यूआई / डोमेन मॉडल का यह विभाजन होना अच्छा लगता है ... sorta लेखन लिखने की तरह :)

मैंने मॉडलों के बारे में अतीत में कुछ एमवीसी सलाह पढ़ी है जिसमें कहा गया है कि आपको डोमेन और दृश्य के लिए समान मॉडल ऑब्जेक्ट का पुन: उपयोग नहीं करना चाहिए; लेकिन मैं इस बात पर चर्चा करने के लिए तैयार नहीं हूं कि यह बुरा क्यों है।

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

डुप्लिकेशंस और मैपिंग कोड की परेशानी के लायक दो चिंताओं के लिए एक अलग मॉडल क्या बनाता है?


क्यूं कर? 'कारण में मॉडल ऑब्जेक्ट का उपयोग करने की क्षमता नहीं होनी चाहिए!

कल्पना करें कि आप दृश्य परत करने के लिए प्रोजेक्ट को वेब डिज़ाइनर पास कर दें। अचानक मॉडल परत के माध्यम से आपके आवेदन के डेटा के साथ गड़बड़ करने की क्षमता है। यह अच्छा नहीं है।

इसलिए विधियों के साथ ऑब्जेक्ट की बजाय हमेशा डेटा को देखने की ज़रूरत होती है।


दृश्य मॉडल की विशेष रूप से स्वरूपित होने और निश्चित रूप से शून्य-सुरक्षित होने की क्षमता सहित सादे चिंताएं भी हैं।


जेपी बुडू के लेख स्क्रीन बाउंड डीटीओ आपको डिजाइन लाभ को समझने में मदद करेंगे।

एक सुरक्षा लाभ भी है जिसके बारे में मैंने लिखा है।

प्रेजेंटेशन मॉडल होने से आपके विचार सरल हो जाते हैं। यह विशेष रूप से महत्वपूर्ण है क्योंकि विचारों को आम तौर पर परीक्षण करना बहुत कठिन होता है। एक प्रेजेंटेशन मॉडल करके आप दृश्य से और डोमेन-> प्रस्तुति मॉडल में बहुत से काम को स्थानांतरित करते हैं। स्वरूपण जैसी चीजें, शून्य मानों को संभालना और ऑब्जेक्ट ग्राफ़ को फ़्लैट करना।

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


मैंने आखिरकार कूल-एइड को नशे में डाला है, मैं अपने व्यूमोडेल को डिस्प्ले निर्देशों के साथ चिह्नित करने में सक्षम हूं और यह सब ऑटो वायर्ड है।

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


अपने दिल में, दो मॉडल चिंता के पृथक्करण के बारे में है। मैं चाहता हूं कि मेरा दृश्य एक मॉडल से काम करे। मैं चाहता हूं कि मेरा डोमेन मॉडल डोमेन विशेषज्ञों के साथ निर्मित वैचारिक मॉडल का प्रतिनिधित्व करे। ViewModel में अक्सर तकनीकी बाधाएं होती हैं। डोमेन मॉडल पीओसीओ के बारे में है, और दिखाए गए डेटा (देखें) या जारी (तकनीकी रूप से डीबी या अन्यथा) की तकनीकी बाधाओं से बंधे नहीं है।

मान लीजिए मेरे पास स्क्रीन पर दिखाए गए तीन इकाइयां हैं। क्या इसका मतलब है कि मुझे तीनों के बीच संबंधों को मजबूर करने की ज़रूरत है? या बस एक व्यूमोडेल घटक ऑब्जेक्ट बनाएं जिसमें सभी तीन आइटम हों। एक अलग ViewModel के साथ, देखें चिंताओं को मेरे डोमेन से अलग कर दिया गया है।


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







model-view-controller model separation-of-concerns