क्या व्यूमोडल बनाने के लिए किसी फैक्ट्री क्लास की जरूरत है?


17

मेरे एक सहकर्मी ने हमारे ASP.NET MVC समाधानों में viewmodel ऑब्जेक्ट बनाने के लिए फ़ैक्टरी क्लास का उपयोग करने का सुझाव दिया। विचार यह है कि यह हमारे ऐप में जिस तरह से व्यूमोडल बनाया गया है, उसकी डिज़ाइन और रखरखाव में मदद कर सकता है।

मैं यह जानना चाहता था कि क्या किसी और के पास इसका अनुभव है। मैंने कुछ शोध किया है और इस अभ्यास पर बहुत कम पाया है।

वर्तमान में हम नियंत्रक स्तर पर viewmodel ऑब्जेक्ट बनाते हैं उदा

public ActionResult Index()
{
    return this.View(this.BuildIndexViewModel());
}

तो यह। BildIndexViewModel () viewmodel class बनाने के लिए जिम्मेदार है (जाहिर है :)। लेकिन हम इस पर ध्यान दे रहे हैं:

public ActionResult Index()
{
    return this.View(ViewModelFactory.CreateIndexViewModel());
}

यह एक दिलचस्प विचार है, लेकिन मैं 100% आश्वस्त नहीं हूं। मुझे इस पर अन्य लोगों की राय में दिलचस्पी थी।


4
मैं लाभ के लिए ईमानदार होने के लिए संघर्ष करता हूं। आप वस्तुओं के निर्माण को छिपाने के लिए एक कारखाने का उपयोग करेंगे, लेकिन आप इस मामले में क्यों करेंगे?
19:51 पर कोडार्ट

3
आपका BuildIndexViewModel विधि पहले से ही एक फ़ैक्टरी विधि है, जो संभवत: नियंत्रक के लिए निजी है। एक अलग फैक्ट्री क्लास में निकालने का एकमात्र कारण इसे किसी अन्य नियंत्रक में फिर से उपयोग करना होगा।
मैटवेवी

आप दोनों इस पर मेरे जैसे ही विचार साझा करते हैं, इसलिए मुझे खुशी है कि मैं अकेला नहीं हूं :) @ मैटवेडी मैं ईमानदारी से कह सकता हूं कि मुझे बहुत संदेह है कि व्यूअमॉडल का उपयोग अधिक से अधिक एक नियंत्रक के साथ किया जाएगा, जो कारखाना बनाता है विचार बेमानी। जब विषय फिर से काम पर आएगा तब मैं इसे साझा करूँगा।
जेसन इवांस

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

@MattDavey: क्या आप उन दो टिप्पणियों को एक उत्तर में लपेट सकते हैं जिन्हें मैं बढ़ा सकता हूं?
पीडीआर २३'१२

जवाबों:


8

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

सामान्य तौर पर, एक वर्ग बी को कक्षा ए के उदाहरण बनाने के लिए जिम्मेदार होना चाहिए, यदि निम्न में से कोई एक, या अधिमानतः अधिक

  • B के उदाहरणों में A की समग्र या सम्‍मिलित वृत्तियाँ समाहित हैं
  • ए के बी रिकॉर्ड उदाहरणों के उदाहरण
  • B के उदाहरण A के उदाहरणों का बारीकी से उपयोग करते हैं
  • बी के उदाहरणों में ए के उदाहरणों के लिए प्रारंभिक जानकारी होती है और इसे निर्माण पर पास किया जाता है।

आपका कंट्रोलर क्लास (B) उस सूची के # 3 & # 4 और (# 2 अगर viewmodel पीछे पोस्ट किया गया है) आइटम से मेल खाता है, तो यह पहले से ही viewmodel (A) निर्माण व्यवहार के रहने के लिए एक बहुत ही समझदार स्थान है। जैसा कि मैं देख रहा हूं कि केवल दो कारण होंगे जो मुझे उस निर्माण व्यवहार को विशेषज्ञ वर्ग में निकालने के लिए मजबूर करेंगे।

  • DRY - यदि दो या दो से अधिक नियंत्रकों को व्यूमोडल निर्माण व्यवहार को साझा करने की आवश्यकता है, तो इसे एक अलग घटक में एनकोड करने से कोड को फिर से उपयोग करने और दोहराव से बचने में सुविधा होगी।
  • यदि निर्माण व्यवहार में अन्य सिस्टम घटकों जैसे कि रिपॉजिटरी, वैलिडेटर आदि पर निर्भरता होती है, और आप इस युग्मन को नियंत्रक (GRASP शर्तों, एक शुद्ध निर्माण) में स्वयं शुरू नहीं करना चाहते हैं।

जीआरएएसपी में उन 4 ऑब्जेक्ट निर्माण मानदंडों को देखते हुए, मैं केवल एक अलग कारखाने के लिए व्यवहार को निकालूंगा अगर यह मुझे उस सूची में एक अतिरिक्त टिक जीता। अन्यथा ऐसा करने में कोई मूल्य नहीं होगा।

उम्मीद है की वो मदद करदे!

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