मैंने देखा है कि बहुत से डेवलपर प्रत्येक कक्षा के लिए इंटरफ़ेस को परिभाषित करते हैं जिसे DI ढांचे का उपयोग करके इंजेक्शन दिया जा रहा है। प्रत्येक वर्ग के लिए इंटरफेस को परिभाषित करने के क्या फायदे हैं?निर्भरता इंजेक्शन और इंटरफेस का उपयोग कर?
उत्तर
दे अपने एप्लिकेशन घटकों (वर्गों है कि आवेदन तर्क शामिल) को लागू एक अंतरफलक महत्वपूर्ण है, के बाद से इस की अवधारणा को बढ़ावा दिया: एक अंतरफलक, नहीं एक कार्यान्वयन के लिए
कार्यक्रम।
यह प्रभावी रूप से Dependency Inversion Principle है। ऐसा करने से आप इस निर्भरता के उपभोक्ताओं को बदलने की आवश्यकता के बिना निर्भरताओं को प्रतिस्थापित, अवरुद्ध या सजाने की अनुमति देते हैं।
कई मामलों में डेवलपर्स SOLID सिद्धांतों का उल्लंघन करेंगे, हालांकि कक्षाओं और इंटरफेस के बीच लगभग एक-से-एक मैपिंग होने पर। उन सिद्धांतों में से एक जो लगभग निश्चित रूप से उल्लंघन किया गया है Open/closed principle है, क्योंकि जब प्रत्येक वर्ग का अपना इंटरफ़ेस होता है, तो क्रॉस-कटिंग चिंताओं के साथ कक्षाओं के एक समूह को विस्तारित (सजाने) संभव नहीं है (गतिशील प्रॉक्सी पीढ़ी की चाल के बिना)।
सिस्टम लिखने में, मैं दो जेनेरिक इंटरफेस को परिभाषित करता हूं जो व्यापार परत के कोड के बड़े हिस्से को कवर करते हैं। वे ICommandHandler<TCommand>
और कहा जाता है एक IQueryHandler<TQuery, TResult>
:
public interface ICommandHandler<TCommand>
{
void Handle(TCommand command);
}
public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
{
TResult Handle(TQuery query);
}
कई इंटरफेस को परिभाषित करने के न होने का अच्छा पक्ष प्रभाव के अलावा, इस महान लचीलापन और परीक्षण में आसानी अनुमति देता है। आप इसके बारे में here और here के बारे में अधिक पढ़ सकते हैं।
प्रणाली मैं लिखने के आधार पर, मैं भी इस तरह के रूप इंटरफेस का उपयोग हो सकता है:
IValidator<T>
संदेशोंISecurityValidator<T>
मान्य संदेशोंIRepository<T>
, भंडार तर्ज पर सुरक्षा प्रतिबंधों को लागू करने के लिए के लिएIQueryable<T>
प्रश्नों पर प्राधिकरण/सुरक्षा फ़िल्टरिंग लागू करने के लिएIAuthorizationFilter<T>
।
मैं लिखने वाली प्रणाली के आधार पर, सभी घटकों के 80% और 98% प्रोसेस के बीच कहीं भी इन सामान्य इंटरफेस को परिभाषित करता हूं। यह उन लोगों को क्रॉस-कटिंग चिंताओं को लागू करता है जिन्हें joinpoints तुच्छ माना जाता है।
इस ब्लॉग प्रविष्टि जवाब आप के लिए देख रहे हैं की एक बहुत कुछ है: http://benpryor.com/blog/2006/08/23/java-advantages-of-interfaces/
आप इंटरफेस के डिजाइन नहीं है, तो आप पंगु होने के लिए जब वह अपने कोड refactor करने के लिए और/या समय आता जा रहे हैं वृद्धि जोड़ें। एक इंटरफ़ेस को डिज़ाइन करने की बात आती है जब एक डी फ्रेमवर्क का उपयोग वास्तव में समस्या पर नहीं है। क्या DI आपको देर से बाध्यकारी और इकाई परीक्षण लिखने की बेहतर क्षमता देता है।
यह कहता है कि पेज नहीं मिला। कृपया अद्यतन करें –
- 1. निर्भरता इंजेक्शन और लॉगिंग इंटरफेस
- 2. निर्भरता इंजेक्शन का उपयोग करके निर्भरता इंजेक्टर इंजेक्शन
- 3. निर्भरता इंजेक्शन का उपयोग करें
- 4. इंटरफेस बनाम टेम्पलेट्स सी में निर्भरता इंजेक्शन ++
- 5. इंटरफेस या कक्षाओं के साथ निर्भरता इंजेक्शन
- 6. एमवीवीएम और निर्भरता इंजेक्शन
- 7. निर्भरता इंजेक्शन और विकास उत्पादकता
- 8. एंड्रॉइड और निर्भरता इंजेक्शन
- 9. वेबफॉर्म और निर्भरता इंजेक्शन
- 10. निर्भरता इंजेक्शन और कारखाने
- 11. Roboguice के साथ निर्भरता इंजेक्शन का उपयोग?
- 12. लाइब्रेरी में निर्भरता इंजेक्शन का उपयोग
- 13. निर्भरता इंजेक्शन
- 14. एएसएमएक्स निर्भरता इंजेक्शन और आईओसी
- 15. निर्भरता इंजेक्शन और नामित वालों
- 16. निर्भरता इंजेक्शन - इंटरफ़ेस का मालिक कौन है?
- 17. एमवीपी निर्भरता इंजेक्शन
- 18. सी # कन्स्ट्रक्टर और निर्भरता इंजेक्शन
- 19. @ कैशेबल ब्रेक निर्भरता इंजेक्शन
- 20. डीएओ और निर्भरता इंजेक्शन, सलाह?
- 21. निर्भरता इंजेक्शन और परियोजना संरचना
- 22. एकता [निर्भरता] इंजेक्शन और विरासत
- 23. निर्भरता इंजेक्शन
- 24. निर्भरता इंजेक्शन?
- 25. निर्भरता इंजेक्शन
- 26. वसंत निर्भरता इंजेक्शन और प्लगइन जार
- 27. स्टेटिक तरीके से निर्भरता इंजेक्शन का उपयोग कैसे करें?
- 28. रूबी निर्भरता इंजेक्शन पुस्तकालय
- 29. निर्भरता इंजेक्शन सर्वोत्तम अभ्यास
- 30. निर्भरता इंजेक्शन कंटेनर (PHP)
क्यों बंद करें? समय लेने और टिप्पणी छोड़ने के बारे में कैसे? – aryaxt
-1 एफएक्यू अंक देखें "मैं यहां किस तरह के प्रश्न पूछ सकता हूं?" और "मुझे यहां कौन से प्रश्न नहीं पूछना चाहिए"। वे सूची में पहले दो हैं। –
आपका प्रश्न वैध और रोचक प्रश्न है, लेकिन यह थोड़ा अस्पष्ट है और बहुत विशिष्ट नहीं है (उदाहरण के लिए कोई कोड उदाहरण नहीं), यही कारण है कि लोगों ने इसे कम किया और इसे बंद करने के लिए वोट दिया। – Steven