मेरे पास निम्न के जैसा कोड है।क्या क्लास लेवल वैरिएबल पर उपयोग कथन का उपयोग करना बुरा व्यवहार है?
class MyController
{
[ThreadStatic] private DbInterface db;
public void ImportAllData()
{
using (db = new DbInterface())
{
var records = PullData();
PushData(records);
}
}
private DbRecord[] PullData()
{
return db.GetFromTableA();
}
private void PushData(DbRecord[] records)
{
db.InsertIntoTableB(records);
}
}
विकल्प बनाए रखने के लिए बहुत अधिक बोझिल है।
class MyController
{
public void ImportAllData()
{
using (var db = new DbInterface())
{
var records = PullData(db);
PushData(records, db);
}
}
private DbRecord[] PullData(DbInterface db)
{
return db.GetFromTableA();
}
private void PushData(DbRecord[] records, DbInterface db)
{
db.InsertIntoTableB(records);
}
}
जहां तक मैं देख सकता हूँ, मेरा पहला कार्यान्वयन:
- धागा सुरक्षित (यह मानते हुए
DbInterface
धागा सुरक्षित है), db
चर छूने से किसी अन्य प्रक्रिया रोकता है, और है
- सुनिश्चित करता है कि
db
हमेशा अपवाद के दौरान भी निपटाया जाएगा।
क्या कक्षा के दायरे वाले चर पर using
कथन का उपयोग करना बुरा व्यवहार है? क्या मुझे कुछ याद आया है?
एक एक्सटेंशन का उपयोग कर माना जाता है? या आप इसे बहुत करने की योजना बना रहे हैं। –
दिलचस्प बात यह है कि यदि आप कभी भी विन फॉर्म पेंटिंग कोड करते हैं, तो कम से कम उपयोग ब्लॉक के बाहर रेफरी पास करने के संबंध में ऑनपेंट और पेंट इवेंट बहुत कम हैं। आपको एक ग्राफिक्स संदर्भ पारित किया गया है जो आपके लिए आवंटित किया गया था और जिसका प्रबंधन/निपटान कॉलर द्वारा संभाला जाता है और इसलिए आप इसे वास्तविक चित्रकारी विधियों में स्वयं का निपटान नहीं करते हैं। – tcarvin
@ डैनसाल्टमेर, मैं अन्य नियंत्रकों में 'डीबीइंटरफेस' वर्ग का उपयोग करने की योजना बना रहा हूं। मैं नियंत्रकों को सभी 'डीबीइंटरफेस' विधियों तक पहुंच प्राप्त करना चाहता हूं, लेकिन मैं नियंत्रकों को एक-दूसरे के निजी तरीकों के बारे में जानने के लिए नहीं चाहता हूं। मेरी समझ के लिए, एक्सटेंशन विधियां सभी 'डीबीइंटरफेस' उदाहरणों पर लागू होंगी। या मैंने आपको गलत समझा है? –