Uznałbym to za zapach architektury w tym, że UpdateData prawdopodobnie powinien należeć do klasy „service”.
Gdzie dane to Apple. Gdzie AppleAdapter jest usługą / klasą inteligencji biznesowej. Gdzie AppleService to odwołanie Singleton do AppleAdapter, który istnieje poza bieżącą metodą.
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);
}
Nie sądzę, że to, co robisz, jest niekoniecznie złe, ale jeśli SomeDataAdapter rzeczywiście reprezentuje jakąś bezpaństwową usługę biznesową, wówczas najlepszym rozwiązaniem będzie singleton. Mam nadzieję, że to pomaga! Podany przykład jest fantazyjnym sposobem na zapewnienie braku rywalizacji _appleService, jeśli zdarzyło się, że jest ona zarówno pusta, jak i dostępna w tym samym czasie przez dwa lub więcej wątków.
Wiesz co? Jeśli SomeDataAdapter jest ADO IDbDataAdapter (którym prawie na pewno jest), zignoruj całą odpowiedź!
: P
Nie mam uprawnień, aby dodać komentarz do pierwotnego pytania, ale jeśli możesz określić, gdzie istnieje ten kod.
Jeśli ten kod reprezentuje niestandardową implementację IDbDataAdapter, a UpdateData tworzy IDbConnection, IDbCommand i łączy to wszystko za kulisami, to nie, nie uważałbym, że kod pachnie, ponieważ teraz mówimy o strumieniach i innych rzeczy, które należy usunąć, gdy skończymy ich używać.