Я бы посчитал это запахом архитектуры в том смысле, что UpdateData, вероятно, должен принадлежать к классу «сервис».
Где данные Apple. Где AppleAdapter - это класс обслуживания / бизнес-аналитики. Где AppleService является ссылкой Singleton на AppleAdapter, который существует вне текущего метода.
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);
}
Я не думаю, что то, что вы делаете, не обязательно обязательно, но если SomeDataAdapter действительно представляет какую-то бизнес-службу без сохранения состояния, то лучшим вариантом для этого будет синглтон. Надеюсь, это поможет! Приведенный пример является причудливым способом гарантировать отсутствие конкуренции за _appleService, если он оказался одновременно нулевым и к нему одновременно обратились два или более потоков.
Знаешь что? Если SomeDataAdapter является ADO IDbDataAdapter (которым он почти наверняка является), не обращайте внимания на весь этот ответ!
:П
У меня нет разрешения на добавление комментария к исходному вопросу, но если бы вы могли указать, где этот код существует.
Если этот код представляет пользовательскую реализацию IDbDataAdapter, а UpdateData создает IDbConnection, IDbCommand и подключает все это за кулисами, то нет, я бы не стал считать, что запах кода, потому что теперь мы говорим о потоках и других вещи, от которых нужно избавляться, когда мы закончим, используя их.