सामान्य रूप से विधियों के साथ कक्षाओं का तात्कालिकता, लेकिन कोई फ़ील्ड या गुण नहीं है, बहुत अधिक उपर है?विधियों के साथ कक्षा तत्काल कितनी तेजी से है, लेकिन कोई फ़ील्ड या गुण नहीं है?
मैं एक एएसपी.नेट एमवीसी अनुप्रयोग विकसित कर रहा हूं जो कन्स्ट्रक्टर इंजेक्शन का उपयोग करता है और कुछ नियंत्रकों तक अब तक 10 निर्भरताएं हैं। लेकिन निर्भरता की उच्च संख्या के कारण, मैं एक IMyAppServiceProvider
इंटरफेस और वर्ग है कि सभी निर्भरता के लिए जेनेरिक पहुँच प्रदान करता है के लिए DependencyResolver के माध्यम से MVC में सहारा, 3.
मैं अपने सभी आवेदन विशिष्ट कोड बाहर फट और एक Gist के साथ बनाया मेरा मूल सेटअप (इसमें नीचे उल्लिखित बेसकंट्रोलर सेटअप शामिल नहीं है)।
मैंने बेसकंट्रोलर क्लास भी बनाया जो IMyAppServiceProvider
स्वीकार करता है। सभी नियंत्रक इस बेस क्लास से प्राप्त होते हैं। बेस क्लास IMyAppServiceProvider
ऑब्जेक्ट लेता है और सभी विभिन्न सेवाओं के लिए चर सुरक्षित करता है। कोड इस तरह कुछ दिखता है:
public class BaseController
{
protected IService1 _service1;
protected IService2 _service2;
protected IService3 _service3;
// ...
public BaseController(IMyAppServiceProvider serviceProvider)
{
_service1 = serviceProvider.GetService<IService1>;
_service2 = serviceProvider.GetService<IService2>;
_service3 = serviceProvider.GetService<IService3>;
// ...
}
}
यह नियंत्रकों के लिए कोड "स्क्केकी क्लीन" बनाता है। कोई निजी/संरक्षित चर नहीं, कन्स्ट्रक्टर में कोई असाइनमेंट नहीं है, और सेवाओं को बेस क्लास संरक्षित चर द्वारा संदर्भित किया जाता है। हालांकि, प्रत्येक अनुरोध प्रत्येक एप्लिकेशन को तत्काल करेगा जो मेरा एप्लिकेशन उपयोग करता है, चाहे वह विशिष्ट नियंत्रक उन सभी का उपयोग करता हो या नहीं।
मेरी सेवाएं सरल हैं और केवल कुछ व्यावसायिक तर्क और डेटाबेस इंटरैक्शन के साथ विधि कॉल शामिल हैं। वे स्टेटलेस हैं और उनके पास कोई वर्ग फ़ील्ड या गुण नहीं हैं। इसलिए, त्वरण तेजी से होना चाहिए, लेकिन मुझे आश्चर्य है कि यह एक सर्वोत्तम अभ्यास है (मुझे पता है कि यह एक लोड अवधि है)।
हमेशा के रूप में, प्रोफ़ाइल पहले। हालांकि, मुझे लगता है कि निर्भरताओं को हल करना उनको तत्काल करने की तुलना में धीमी गति के आदेश है। –
@insta वाह, मैंने पेड़ों के माध्यम से जंगल नहीं देखा। लेकिन निनजेक्ट और/या अन्य आईओसी कंटेनर कैश निर्भरता को हल करते हैं? –
मैंने नीचे एक उत्तर जोड़ा जो आपकी मदद कर सकता है ... मैंने पहले इस सटीक समस्या में भाग लिया है। अधिकांश लोग (स्वयं शामिल) यह नहीं जानते कि आप कंट्रोलर फैक्टरी एएसपी.नेट एमवीसी नियंत्रकों को बनाने के लिए उपयोग कर सकते हैं। एक कस्टम एक आपके आईओसी कंटेनर को कसकर एकीकृत कर सकता है और निर्भरता को स्पूल कर सकता है क्योंकि उनकी आवश्यकता होती है। –