Saya akan menganggapnya sebagai bau arsitektur dalam UpdateData yang mungkin seharusnya milik kelas 'layanan'.
Di mana datanya adalah Apple. Di mana AppleAdapter adalah kelas layanan / bisnis-intelijen. Di mana AppleService adalah referensi Singleton ke AppleAdapter yang ada di luar metode saat ini.
private static volatile AppleAdapter _appleService = null;
private static object _appleServiceLock = new object();
private AppleAdapter AppleService
{
get
{
if (_appleService == null)
{
lock (_appleServiceLock)
{
if (_appleService == null)
_appleService = new AppleAdapter();
}
}
return _appleService;
}
}
public SomeAppleRelatedMethod(Apple apple)
{
AppleService.UpdateData(apple);
}
Saya tidak berpikir apa yang Anda lakukan itu salah, tetapi jika SomeDataAdapter memang mewakili semacam layanan bisnis tanpa kewarganegaraan, maka seorang singleton akan menjadi praktik terbaik untuk itu. Semoga itu bisa membantu! Contoh yang diberikan adalah cara mewah untuk memastikan tidak ada pertentangan dari _appleService jika kebetulan keduanya null dan diakses pada waktu yang sama persis oleh dua utas atau lebih.
Kamu tahu apa? Jika SomeDataAdapter adalah ADO IDbDataAdapter (yang hampir pasti), abaikan seluruh respons ini!
: P
Saya tidak memiliki izin untuk menambahkan komentar ke pertanyaan awal, tetapi jika Anda dapat menentukan di mana kode ini ada.
Jika kode ini mewakili implementasi kustom IDbDataAdapter, dan UpdateData membuat IDbConnection, IDbCommand, dan memasang semuanya di belakang layar, maka tidak, saya tidak akan menganggap kode itu berbau karena sekarang kita berbicara tentang stream dan lainnya hal-hal yang perlu dibuang ketika kita selesai menggunakannya.