Eu consideraria um cheiro de arquitetura em que UpdateData provavelmente deveria pertencer a uma classe 'service'.
Onde os dados são uma Apple. Onde AppleAdapter é a classe de serviço / business intelligence. Onde AppleService é uma referência Singleton a um AppleAdapter que existe fora do método atual.
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);
}
Eu não acho que o que você está fazendo esteja errado necessariamente, mas se SomeDataAdapter realmente representar algum tipo de serviço de negócios sem estado, um singleton seria a melhor prática para ele. Espero que ajude! O exemplo fornecido é uma maneira sofisticada de garantir nenhuma contenção do _appleService se ele for nulo e acessado exatamente ao mesmo tempo por dois ou mais encadeamentos.
Você sabe o que? Se SomeDataAdapter for um ADO IDbDataAdapter (o que quase certamente é), desconsidere toda a resposta!
: P
Não tenho permissão para adicionar um comentário à pergunta original, mas se você puder especificar onde esse código existe.
Se esse código representa uma implementação personalizada de um IDbDataAdapter, e o UpdateData está criando um IDbConnection, IDbCommand e conectando tudo nos bastidores, então não, eu não consideraria um cheiro de código, porque agora estamos falando de fluxos e outros coisas que precisam ser descartadas quando terminarmos de usá-las.