में निर्भरता इंजेक्शन का उपयोग करते समय अपवादों को संभालना, सबसे पहले, कृपया किसी भी टाइपो को क्षमा करें क्योंकि अंग्रेजी मेरी मूल भाषा नहीं है।सी # 4.0
मान लें कि मैं अपने आवेदन में कन्स्ट्रक्टर इंजेक्शन का उपयोग करना चाहता हूं। उदाहरण के लिए, मैं ऐसा ही कुछ करना होगा:
public class FileDataProvider : IDataProvider
{
public MyData GetData()
{
// Get data from a file
}
}
public class DatabaseDataProvider : IDataProvider
{
public MyData GetData()
{
// Get data from a database
}
}
public class DataReader : IDataReader
{
private IDataProvider dataProvider;
public DataReader(IDataProvider dataProvider)
{
this.dataProvider = dataProvider;
}
public void OutputData()
{
MyData data = dataProvider.GetData();
Console.WriteLine("{0}", data.ToString());
}
}
अगर मैं निर्माता इंजेक्शन मैं परिभाषा से है पर कोई नियंत्रण नहीं है और न ही वर्ग को लागू करने IDataProvider कि मेरे DataReader वर्ग में इंजेक्ट किया जाएगा ठोस उदाहरण के बारे में विचार का उपयोग करें। मतलब यह है कि मेरे डेटा रीडर वर्ग में मुझे नहीं पता कि गेटडाटा विधि में क्या चल रहा है, इस तथ्य के साथ कि मुझे नहीं पता कि यह अपवाद फेंक सकता है या नहीं और यदि ऐसा है तो किस तरह का अपवाद।
मेरी आउटपुटडेटा विधि में, क्या मुझे अपना कोड किसी प्रयास {} पकड़ {} ब्लॉक में लपेटना चाहिए और यदि ऐसा है तो मुझे क्या अपवाद मिलना चाहिए? अगर मैं IOException या SQLException को पकड़ता हूं या वास्तव में कोई अपवाद का अर्थ है कि मैं कुछ तरीकों से पूर्वकल्पना कर रहा हूं IDataProvider लागू/लागू किया जाना चाहिए। मुझे नहीं लगता कि यह अच्छा है। मैं एक XMLDataProvider या NetworkResourceDataProvider इंजेक्शन भी हो सकता है। लेकिन साथ ही मुझे किसी बिंदु पर अपवादों को संभालना होगा।
मेरा प्रश्न: अपवाद को संभालने का सही तरीका क्या है और सामान्य रूप से नियंत्रण में उलझन और कन्स्ट्रक्टर इंजेक्शन का उपयोग करके किसी एप्लिकेशन में क्या होता है लॉगिंग करना क्या है? इंटरफ़ेस लागू करने वाले वर्ग में अपवाद फेंकने के लिए - सही तरीका क्या है - यदि कोई है?
-
मेरे सवाल का एक सटीक जोड़ा जा रहा है, मैं कोड है कि लागू करेगा IDataProvider तो मैं भी यकीन है कि एक कस्टम अपवाद, का कहना है कि DataProviderException
फेंक दिया जाएगा नहीं किया जा सकता ही नहीं होंगे। यहां तक कि यदि मैं डेवलपर्स के लिए दिशानिर्देश लिखने के लिए लिखता हूं ...
सहमत हुए। आपके उपभोक्ता वर्ग को यह जानने की आवश्यकता नहीं है कि क्या हुआ। यह सिर्फ एक सामान्य रैपर अपवाद के साथ एक पैक अपवाद को पकड़ सकता है और यदि अधिक जानकारी प्रदान करने की आवश्यकता है - जैसे अपवाद पुनर्प्राप्त करने योग्य है या नहीं - इसे अपने रैपर अपवाद पर परिभाषित करें। –
मैंने इसके बारे में सोचा लेकिन यह केवल तभी काम करेगा यदि मेरे पास कोड है जो 'आईडीटाप्रोवाइडर' लागू करता है जो मामला नहीं है। तो मैं वास्तव में सुनिश्चित नहीं कर सकता कि अन्य डेवलपर्स 'DataProviderException' को फेंक देंगे। मैं अभी भी कुछ दिशानिर्देश जोड़ सकता हूं लेकिन मुझे यकीन नहीं है कि उनका पालन किया जाएगा ... मैं इसे प्रतिबिंबित करने के लिए अपना प्रश्न अपडेट करूंगा। – Guillaume
@ गुइलाइम: फिर बहुत उपयोगी नहीं किया जा सकता है और मैं जॉन सॉंडर्स से सहमत हूं: अगर आप इसे संभाल नहीं सकते हैं तो इसे पकड़ें – BrokenGlass