2009-12-22 24 views
6

में दृश्य तर्क और डोमेन तर्क के बीच भ्रम मैं डोमेन/एप्लिकेशन तर्क और उपयोगकर्ता इंटरफ़ेस तर्क के बीच भ्रमित हो रहा हूं। उदाहरण के लिए, मैं चित्रण उद्देश्यों के लिए नीचे दिए गए एक काल्पनिक कार्यक्रम का वर्णन करूंगा:एएसपी.नेट एमवीसी वेब अनुप्रयोग

(1) 3 कैस्केडिंग ड्रॉप-डाउन के सेट के साथ एक छोटा सा एप्लिकेशन की कल्पना करें। जैसे ही आप एक ड्रॉपडाउन चुनते हैं, यह एक jQuery अजाक्स जीईटी ट्रिगर करता है जो पहले एमवीसी नियंत्रक को मारता है, जो पहले चयनित ड्रॉप-डाउन के चयनित मूल्य की आपूर्ति करता है। नियंत्रक अगले ड्रॉप-डाउन के लिए स्वीकार्य विकल्प देता है। जावक्रिप्ट (दृश्य में) इन परिणामों को एक ड्रॉप-डाउन में व्यवस्थित करता है। और इसी तरह। तो प्रत्येक बार जब आप ड्रॉप-डाउन चुनते हैं, तो अगला वाला पॉप्युलेट हो जाता है।

(2) अब एक रिंच में फेंक रहा है .. कुछ अपवाद हैं। आइए कहें कि क्या उपयोगकर्ता पहले ड्रॉपडाउन में "फू" या "बार" का चयन करता है, तो व्यवहार में परिवर्तन होता है, ताकि दूसरा ड्रॉपडाउन अक्षम हो, और थ्रूड ड्रॉपडाउन इसके बजाय एक टेक्स्टबॉक्स दिखाएगा।

मेरे प्रश्न एमवीसी के संदर्भ में, इस "निर्णय" तर्क के लिए उपयुक्त जगह क्या है? जैसे कोड (2) में इन निर्णयों को बनाने के लिए जिम्मेदार कोड है। सबसे सुविधाजनक स्थान जिसे मैं इसे डाल रहा हूं वह दृश्य के जावास्क्रिप्ट में सही था। मैंने बस यह जांचने के लिए जावास्क्रिप्ट लिखा है कि पहला बॉक्स "फू" या "बार" है, फिर दूसरा ड्रॉपवॉउन अक्षम करें, और टेक्स्टबॉक्स के लिए तीसरे ड्रॉपडाउन को स्वैप करें। लेकिन यह मेरे लिए बिल्कुल सही नहीं लगता है। क्योंकि ऐसा लगता है कि यह व्यापार तर्क होना चाहिए इसलिए कोड किसी डोमेन परत में किसी स्थान पर होना चाहिए। लेकिन यह बिल्कुल सही नहीं लगता है।

और इसलिए मुझे लगता है कि मैं मंडलियों में जा रहा हूं। क्या कोई इस छोटे से डिजाइन पर कुछ प्रकाश डाल सकता है?

+0

ईश्वर यह प्रश्न मेरे डाउनटाइम में मुझे कैसे पीड़ित करता है। – Merritt

उत्तर

2

बंटवारे भी कई बाल या हो रही क्या शुद्ध पद्धति रखने के लिए किया जाना चाहिए पर भी कट्टर बिना ...

जाहिर नियंत्रक जानता है यह परिवर्तन है कि होना चाहिए, क्योंकि यह दोनों परिणामी मामलों (चयन ड्रॉप या टेक्स्ट एंट्री ड्रॉप) को संभालेगा। तो नियंत्रक में इससे संबंधित तर्क डालना पाप नहीं है।

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

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

1

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

एमवीसी 2 सामान आने के साथ उनके पास कुछ वाकई महान सत्यापन सर्वर/क्लाइंट साइड सत्यापन चल रहा है। इस पर स्कॉट गू की पोस्ट और अधिक जानकारी की जाँच करें: MVC 2 Blog Post

7

चलिए डोमेन मॉडल से शुरू करते हैं।एक डोमेन मॉडल एक एपीआई है जो मॉडल को प्रौद्योगिकी-तटस्थ तरीकों से डोमेन करता है। यह JQuery, HTML या (उस बात के लिए) XAML या Windows फार्म के रूप में देखें तकनीकों के बारे में कुछ भी नहीं जानता है।

डोमेन मॉडल वर्गों और इंटरफेस है कि डोमेन का वर्णन होता है और आप एक अमीर और अर्थपूर्ण ढंग से डोमेन अवधारणाओं मॉडल की सुविधा देता है - कोई फर्क नहीं पड़ता आवेदन आप किस प्रकार विकसित कर रहे हैं।

इसे ध्यान में रखते

, यह देखने के लिए कि प्रदर्शन तर्क आपके द्वारा बताई गई डोमेन मॉडल में नहीं है काफी आसान है। इसलिए, यह एक यूआई-विशिष्ट परत में होना चाहिए।

आप इसे अलग यूआई तर्क मॉड्यूल या अपने यूआई एप्लिकेशन के साथ एक साथ रख सकते हैं - आपके मामले में एक एएसपी.नेट एमवीसी अनुप्रयोग। चाहे आप जावास्क्रिप्ट या सर्वर-साइड में वांछित यूआई तर्क व्यक्त करते हैं, कम महत्वपूर्ण है।

व्यक्तिगत रूप से, मैं आंशिक रूप से इस तर्क सर्वर-पक्ष को परिभाषित करता हूं, लेकिन ऐसा इसलिए है क्योंकि मुझे टेस्टेबिलिटी के बारे में बहुत कुछ पता है, और मुझे पता है कि मैं इस तरह के व्यवहार का परीक्षण कैसे करूंगा (मुझे बताया गया है कि यूनिट परीक्षण JQuery के लिए यह संभव है कोड भी है, लेकिन मुझे नहीं पता कि यह सच है या नहीं)।

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

0

अपने उदाहरण मैं नियंत्रक में इस तर्क कोई फ़र्क नहीं पड़ेगा को देखते हुए यह निश्चित रूप से डोमेन मॉडल में संबंधित नहीं है। मैं व्यक्तिगत रूप से नियंत्रक में AJAX GET अनुरोध को बेहतर तरीके से पकड़ने और jQuery में उस तर्क को करने के बजाय जेएसओएन के साथ आउटपुट का निर्धारण करने का निर्णय लेता हूं (मैं जावास्क्रिप्ट में सी # में अधिक आरामदायक महसूस करता हूं)। ऐसा कहा जा रहा है कि, मैं अपनी एक्शन विधियों को पतला रखना चाहता हूं, इसलिए मैं जो करूँगा वह यह समझने के साथ तर्क को शामिल करता है कि कंसोलर पर एक विधि में ड्रॉपडाउन को कैसे पॉप्युलेट करना है और इसे [NonAction] से सजाएं।

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