हाँ एक कनेक्शन के आसपास से गुजरना सुरक्षित है। आप एक बाहरी नियंत्रण ब्लॉक में कनेक्शन को संभालते हैं। इसके बारे में कुछ भी असुरक्षित नहीं है।
असुरक्षित क्या है कोड लिख रहा है जो कनेक्शन की गारंटी नहीं देता है समय पर ढंग से निपटाना ठीक है। एक संसाधन को साफ करने के लिए भूलकर इसे पारित करने के लिए असंबंधित है। आप बस आसानी से कोड लिख सकते हैं जो एक लटकते हुए कनेक्शन को बिना कहीं पास किए छोड़ देता है।
C ++ में, यदि आप स्टैक पर आवंटित करते हैं या स्मार्ट पॉइंटर्स का उपयोग करते हैं, तो आप RAII द्वारा संरक्षित हैं। सी # में एक कठोर नियम बनाएं कि सभी डिस्पोजेबल ऑब्जेक्ट्स (जैसे कनेक्शन) को "ब्लॉक" का उपयोग करके घोषित किया जाए। जावा में कोशिश-आखिर तर्क के साथ सफाई करें। यह सुनिश्चित करने के लिए सभी डेटा लेयर कोड पर कोड समीक्षा करें।
सबसे आम उपयोग-मामला तब है जब आपके पास कई ऑपरेशन हैं जिन्हें कई क्रमपरिवर्तन में जोड़ा जा सकता है। और इनमें से प्रत्येक क्रमपरिवर्तन को एक परमाणु-लेनदेन (सभी सफल या रोलबैक) होने की आवश्यकता है। फिर आपको सभी तरीकों के आसपास लेन-देन (और इसलिए संबंधित कनेक्शन) पास करना होगा।
मान लें कि हमारे पास कई फ़ोबार () क्रियाएं हैं जिन्हें परमाणु-लेनदेन के रूप में विभिन्न तरीकों से जोड़ा जा सकता है।
//example in C#
//outer controlling block handles clean up via scoping with "using" blocks.
using (IDbConnection conn = getConn())
{
conn.Open();
using (IDbTransaction tran = conn.BeginTransaction())
{
try
{//inner foobar actions just do their thing. They don't need to clean up.
foobar1(tran);
foobar2(tran);
foobar3(tran);
tran.Commit();
}
catch (Exception ex)
{ tran.Rollback(); }
}
}//connection is returned to the pool automatically
BTW आप जितनी जल्दी हो सके कनेक्शन खोलना चाहेंगे, जितनी जल्दी हो सके उन्हें निपटाना। यदि आप ऑब्जेक्ट सदस्यों के रूप में कनेक्शन का इलाज कर रहे हैं, तो उन्हें अनावश्यक स्थिति के रूप में पेश किया जा रहा है, और कनेक्शन को ज़रूरत से ज़्यादा देर तक खुला छोड़ देने पर आपके टीम के साथी सही हो सकते हैं। लेकिन एक पैरामीटर के रूप में एक कनेक्शन या लेनदेन को पारित करने का कार्य स्वाभाविक रूप से गलत नहीं है।
Btw। प्रथम श्रेणी के कार्यों के लिए आपकी भाषा के समर्थन के आधार पर आप फ़ोबार () क्रियाओं की सूची में ले सकते हैं। तो एक फ़ंक्शन क्रियाओं के सभी क्रमपरिवर्तन को संभाल सकता है। प्रत्येक क्रमचय के लिए बाहरी नियंत्रण ब्लॉक के दोहराव को खत्म करना।