मैं अपने एपीआई के माध्यम से सॉफ्टवेयर के दूसरे टुकड़े के लिए एक ऐड-इन लिख रहा हूं। एपीआई द्वारा लौटाई गई कक्षाएं केवल मूल सॉफ्टवेयर और एपीआई के माध्यम से पहुंच सकती हैं। इसलिए मैं अपने स्वयं के स्टैंड अकेले पीओसीओ/डीटीओ ऑब्जेक्ट्स लिख रहा हूं जो एपीआई कक्षाओं में मैप करते हैं। मैं एक ऐसी सुविधा पर काम कर रहा हूं जो मूल फ़ाइल में पढ़ेगा, और इन पॉको ऑब्जेक्ट्स का संग्रह वापस कर देगा जिन्हें मैं कहीं और चुरा सकता हूं। वर्तमान में मैं JSON.NET का उपयोग कर रहा हूं ताकि इन वर्गों को जेएसओएन में क्रमबद्ध किया जा सके।वापसी मूल्यों के साथ त्रुटियों को शामिल करने के लिए डिज़ाइन पैटर्न
उदाहरण के लिए मैं अपने डीटीओ में देशी "व्यक्तियों" को पढ़ने के लिए इस
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
}
..और इस तरह की एक विधि की तरह एक डीटीओ हो सकता है वस्तुओं
public static class MyDocReader
{
public static IList<MyPersonDTO> GetPersons(NativeDocument doc)
{
//Code to read Persons from doc and return MyPersonDTOs
}
}
मैं इकाई परीक्षण सेटअप एक परीक्षण फ़ाइल के साथ, हालांकि मैं अन्य फ़ाइलों पर अपना निर्यात चलाते समय अप्रत्याशित समस्याओं में भागता रहता हूं। कभी-कभी देशी वस्तुओं में अप्रत्याशित मूल्य होंगे, या एपीआई में फ्लैट आउट बग होंगे जो कोई कारण नहीं होने पर अपवाद फेंक देते हैं।
वर्तमान में जब कुछ "असाधारण" होता है तो मैं अपवाद लॉग करता हूं और निर्यात विफल रहता है। लेकिन मैंने फैसला किया है कि मैं जो भी कर सकता हूं उसे निर्यात करना चाहता हूं, और त्रुटियों को कहीं रिकॉर्ड कर सकता हूं।
सबसे आसान विकल्प सिर्फ अपवादों को लॉग और निगलना होगा और मैं जो कर सकता हूं उसे वापस करूँगा, हालांकि तब कोई समस्या होने पर मेरे कॉलिंग कोड को जानने का कोई तरीका नहीं होगा।
एक विकल्प जो मैं विचार कर रहा हूं वह एक अलग आउट पैरामीटर के रूप में त्रुटियों का शब्दकोश लौटा रहा है। कुंजी उस संपत्ति की पहचान करेगी जिसे पढ़ा नहीं जा सका, और मूल्य में अपवाद/त्रुटि का विवरण होगा।
public static class MyDocReader
{
public static IList<MyPersonDTO> persons GetPersons(NativeDocument doc, out IDictionary<string, string> errors)
{
//Code to read persons from doc
}
}
वैकल्पिक रूप से मैं भी सिर्फ वापसी वस्तु अपने आप में त्रुटियों के संचय विचार कर रहा था। यह मेरी वस्तु के आकार को बढ़ाता है, लेकिन मेरे ऑब्जेक्ट्स के साथ सीधे त्रुटियों को संग्रहीत करने का अतिरिक्त लाभ होता है। तो बाद में अगर किसी का निर्यात एक त्रुटि उत्पन्न करता है, तो मुझे अपने कंप्यूटर पर सही लॉग फ़ाइल को ट्रैक करने की चिंता करने की आवश्यकता नहीं है।
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
public IDictionary<string, string> Errors {get; set;}
}
यह आमतौर पर कैसे संभाला जाता है? क्या उन त्रुटियों की रिपोर्ट करने के लिए त्रुटियों की रिपोर्ट करने का कोई और विकल्प है जिन पर मैं विचार नहीं कर रहा हूं?
कार्यान्वयन पर निर्भर करता है, मार्टिन फाउलर अंतिम विकल्प को सबसे मान्य मानते हैं। अपवाद तरीका भी है, जहां कुछ गलत होने पर आप अपवाद फेंकते हैं। – Fals
क्या आपके पास ब्लॉग पोस्ट या प्रेजेंटेशन का लिंक होना है जहां मार्टिन इस बारे में बात करता है? –
पोस्ट के लिए लिंक जाता है: http://martinfowler.com/articles/replaceThrowWithNotification.html – Fals