लागू करते समय कन्स्ट्रक्टर में अपवादों से निपटना मैंने पढ़ा है कि मुझे IDisposable
लागू करने की आवश्यकता है यदि मेरी कक्षा में सदस्य चर है जो स्वयं ही IDISposable है। ठीक है, मैं IDisposable
इंटरफेस को लागू कर रहा हूँ क्योंकि मेरी कक्षा एक डेटाबेस वस्तु (नीचे db
वर्ग के सदस्य) शामिल हैं जो IDisposable ही है:IDISposable
public class CommissionModel : IDisposable
{
protected PetaPoco.Database db;
public CommissionModel()
{
string connectionString = "Server=localhost;...";
// The line below may throw an exception (!!!)
db = new PetaPoco.Database(connectionString, "mysql");
}
// Automatically close database connection
public void Dispose()
{
if (db != null)
db.Dispose();
db = null;
}
public void InsertRecord(Record somerecord)
{
// ...
db.Insert(somerecord);
}
समस्या db
सदस्य की इन्स्टेन्शियशन कुछ परिस्थितियों में विफल हो सकता है है। जब अपवाद निर्माता में फेंक दिया जाता है और डेटाबेस वस्तु नहीं बनाया जाता है मुझे क्या करना चाहिए? मैं अपवाद rethrow चाहिए या हो सकता है InsertRecord विधि में अगर db != null
जाँच?
आईएमओ आपको अपवाद को फिर से करना चाहिए। बेहतर परत अलगाव के लिए, आप कुछ उच्च स्तर पर मूल निष्पादन को लपेट सकते हैं। यह सूचित करना बेहतर है कि कुछ गलत हो रहा है। – Krzysztof
पर एक नजर डालें [ठोस] (https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29), विशेष रूप से पर [SRP] (https://en.wikipedia.org/wiki/Single_responsibility_principle) और [DI] (https://en.wikipedia.org/wiki/Dependency_inversion_principle) – oleksii