5

देखो (मैं प्रबंधक निर्भरता निर्भरता इंजेक्शन का उपयोग कर रहा):एकाधिक रेपॉजिटरीज और सेवाओं के साथ .NET एमवीसी नियंत्रक? मेरी नियंत्रक पर

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext) 
{ 
    _roleRepository = roleRepository; 
    _siteRepository = siteRepository; 
    _userRepository = userRepository; 
    _dbContext = dbContext; 
} 

कई निर्भरता के साथ एक कक्षा के बाद एक कोड गंध है? सही?

लेकिन, मेरे उदाहरण में मैं एक Role में Users और Sites संबद्ध करने के लिए तो मैं इस संघ कर रहा करने के लिए इन निर्भरता की जरूरत की जरूरत है,।

मेलिंग सूची पर कुछ लोग मुझे बताया गया था कि बहुत अधिक निर्भरताएं एक संकेत है कि कुछ गलत है। लेकिन मुझे कोई और रास्ता नहीं दिख रहा है। मैंने अपनी जिम्मेदारियों को अलग किया, उस स्थिति में कुछ ऐसा है जो मुझे नहीं पता कि इलाज कैसे करें? क्या कुछ गलत हॆ?

अद्यतन:

मैं डेटा संग्रह स्थान और DbContext जरूरत है क्योंकि DbContext मेरी UnitOfWork है, खजाने को बचाने नहीं है।

यह उदाहरण एक अन्य सीआरयूडी है जिसमें कुछ अन्य कार्यक्षमताओं जैसे जीआरआईडी के साथ दृश्य में एसोसिएशन शामिल हैं।

अद्यतन 2:

मैं एक वास्तुकला का उपयोग कर रहा हूँ जहाँ मेरे यूआई लेयर MVC है।

+1

आम तौर पर मैं केवल कुल जड़ों के लिए भंडार बनाउंगा, न कि प्रत्येक इकाई। मुझे आपका डोमेन नहीं पता, लेकिन मेरा आंत मुझे बताता है कि आपके पास बहुत सारे भंडार हैं। इसके अतिरिक्त, आपको रिपॉजिटरीज़ और डीबीकॉनटेक्स्ट की आवश्यकता क्यों है? आखिरकार, मैं आम तौर पर 'सेवा' में "ऑर्केस्ट्रेशन" प्रकार की व्यावसायिक गतिविधियों को करना पसंद करता हूं, और सेवा को भंडार आदि से निपटने देता हूं। नियंत्रक की निर्भरता केवल सेवा पर ही बन जाती है। – Brook

+0

@ ब्रूक अपडेट देखें। –

+1

संभावित डुप्लिकेट [asp.net-mvc में, क्या आईओसी का उपयोग नियंत्रक में एकाधिक रिपोजिटरी इंजेक्ट करने के लिए एक और अधिक शानदार तरीका है?] (Http://stackoverflow.com/questions/7311623/in-asp-net-mvc- एक-अधिक-सुरुचिपूर्ण-तरीके-उपयोग-आईओसी-टू-इंजेक्शन-मल्टीप्ल-रिपोजिटर है) – Omar

उत्तर

8

मुझे विश्वास नहीं है कि यह एक बुरी बात है, यह देखते हुए कि आप एक अच्छी डी ढांचे के साथ निर्भरताओं का प्रबंधन करते हैं (यानी poor man's DI का उपयोग करके नहीं)। इस तरह, आप स्पष्ट रूप से कहते हैं कि नियंत्रक को इन सभी चीजों की आवश्यकता होगी, क्योंकि यह होगा। (ध्यान दें कि आपके आवेदन के कई अन्य हिस्सों में, यह एक वैध तर्क नहीं हो सकता है - नियंत्रक इस तरह से विशेष है कि जहां आप प्रोग्राम प्रवाह को नियंत्रित और निर्देशित करते हैं, इसलिए एक प्राकृतिक स्पष्टीकरण है कि इसे बहुत सारे देखने की आवश्यकता क्यों है आवेदन के कुछ हिस्सों ...)

हालांकि, अगर आप वास्तव में इस विशिष्ट मामले में निर्भरता की संख्या को सीमित करना चाहते हैं, यह भावना कर सकता है जो सब काम Users, Sites और Roles के साथ संबंध करता है एक MembershipService बनाने के लिए, । उसके बाद उन तीन भंडारों पर निर्भरता होगी, और आपके नियंत्रक की सदस्यता सेवा पर निर्भरता होगी।


अपने अद्यतन के जवाब में: आप काम की इकाई (अर्थात db संदर्भ) रजिस्टर सकता है एक "वेब अनुरोध के अनुसार" सिंगलटन के रूप में - इस महल विंडसर और कई अन्य डि चौखटे साथ संभव है। फिर आप अपने भंडारों को इस पर निर्भर कर सकते हैं और सभी परिवर्तन कर सकते हैं, और नियंत्रक इसे बचाने के लिए इस पर निर्भर करते हैं, और वे सभी को डीआई ढांचे द्वारा उन्हें एक ही उदाहरण दिया जाएगा।

+0

अद्यतन देखें, समस्या यह है कि एमवीसी मेरा यूआई परत है। मुझे प्राप्त तर्क यह है कि: नियंत्रक उपयोगकर्ताओं से अनुरोधों का जवाब देने के लिए ज़िम्मेदार हैं और सिद्धांत रूप से आपके डोमेन से संबंधित नहीं होना चाहिए। –

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