Asp.Net MVC - Common Data Across All Controllers -


सेटअप: (asp.Net MVC 2 आरसी, इकाई फ़्रेमवर्क, SQL सर्वर, VS2008 का उपयोग करके)

मेरे दोस्त और मैं एक ऐसे प्रोजेक्ट पर काम कर रहे हैं, जिस पर इसका उल्लेख करते हुए अलग-अलग डोमेन होंगे। हम डोमेन (वेबसाइट) को अनुरोध से प्राप्त करना चाहते हैं और डेटा का उपयोग करने के लिए इसका उपयोग करना चाहते हैं। इस वेबसाइट के डेटा को सभी नियंत्रकों का हिस्सा होना चाहिए।

Ex Domain1.website.com के लिए डेटा, domain2.website.com के डेटा के मुकाबले अलग होगा, और यह वेबसाइट2.com के डेटा के मुकाबले अलग होगा। साइट का नज़रिया इन सभी के लिए समान है, लेकिन डेटा अलग है।

मैंने एक बेस कंट्रोलर की स्थापना की है जो मेरे सभी अन्य नियंत्रक से प्राप्त होते हैं। लेकिन मुझे यह पसंद नहीं है।

बेस कंट्रोलर:

  सार्वजनिक वर्ग बेसकंट्रोलर: नियंत्रक {निजी वेबसाइट _website; निजी रीडोनली IWebsiteRepository _websiteRepository; सार्वजनिक बेस कंट्रोलर (IWebsiteRepository websiteRepository) {_websiteRepository = websiteRepository; } सार्वजनिक वेबसाइट वर्तमान वेबसाईट {प्राप्त करें; }}  

इस के साथ समस्या यह है कि अब मेरे प्रत्येक नियंत्रकों के आधार पर IWebsiteRepository को पास करना होगा:

  सार्वजनिक वर्ग BioController: BaseController {निजी रीडोनली आईबीओोग्राफी रिपोजिटरी _ बीओ रिपोजिटरी; सार्वजनिक बायोकंट्रोलर (आईबीआईोग्राफी रिपोजिटरी बायो रिपोजिटरी, आईवेब्सैट रिपोजिटरी वेबसाइट रिपोजिटरी): बेस (वेबसाइट रिपॉझिटरी) {_bioRepository = bioRepository; }}  

यहां मेरे प्रश्न हैं

  1. क्या एक प्रोजेक्ट और फ़िल्टरिंग में इंगित किए जाने वाले कई डोमेन को प्रबंधित करने का एक बेहतर तरीका है डेटा?
  2. क्या हर नियंत्रक में वेबसाइट ऑब्जेक्ट का कोई बेहतर तरीका है?

UPDATE

क्षमा करें, मैं इसे जोड़ने में भूल गया था। मैं पहले से ही आईओसी (संरचना मानचित्र) का उपयोग कर रहा हूं। मेरा प्रश्न इस की तर्ज पर अधिक है:

  1. क्या मुझे बेसकंट्रोलर को कुछ और के साथ बदलना चाहिए? एक्शनफ़िल्टर?
  2. क्या इसे सेट करने का कोई तरीका है, इसलिए मुझे बेस वर्ड में IWebsiteRepository को पास करना नहीं पड़ा?
  3. क्या डोमेन के लिए उपयोग किए जाने वाले डोमेन को प्रबंधित करने का एक बेहतर तरीका है? डेटा के लिए?

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

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

  सार्वजनिक बेस कंट्रोलर (): यह (रिक्त) {} सार्वजनिक बेस कंट्रोलर (IWebsiteRepository websiteRepository) {this._websiteRepository = वेबसाइट रिपोजिटरी ?? नई वेबसाइट रिपोजिटरी (); }  

Comments

Popular posts from this blog

oracle - The fastest way to check if some records in a database table? -

php - multilevel menu with multilevel array -

jQuery UI: Datepicker month format -