Lo consideraría un olor a arquitectura en que UpdateData probablemente debería pertenecer a una clase de 'servicio'.
Donde los datos son una manzana. Donde AppleAdapter es clase de servicio / inteligencia de negocios. Donde AppleService es una referencia Singleton a un AppleAdapter que existe fuera del método actual.
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);
}
No creo que lo que está haciendo esté necesariamente mal, pero si SomeDataAdapter realmente representa algún tipo de servicio empresarial sin estado, entonces un singleton sería la mejor práctica para ello. ¡Espero que ayude! El ejemplo proporcionado es una forma elegante de garantizar que no haya contención del _appleService si es que ambos o dos subprocesos son nulos y se accede a ellos exactamente al mismo tiempo.
¿Sabes que? Si SomeDataAdapter es un ADO IDbDataAdapter (que casi seguro es), ¡ignore toda esta respuesta!
:PAG
No tengo permiso para agregar un comentario a la pregunta original, pero si pudiera especificar dónde existe este código.
Si este código representa una implementación personalizada de un IDbDataAdapter, y UpdateData está creando un IDbConnection, IDbCommand y conecta todo detrás de escena, entonces no consideraría que un código huele mal porque ahora estamos hablando de streams y otros cosas que deben eliminarse cuando hayamos terminado de usarlas.