Ich würde es als Architekturgeruch betrachten, dass UpdateData wahrscheinlich zu einer 'Service'-Klasse gehören sollte.
Wo die Daten ein Apple sind. Wobei AppleAdapter eine Service- / Business-Intelligence-Klasse ist. Wobei AppleService ein Singleton-Verweis auf einen AppleAdapter ist, der außerhalb der aktuellen Methode vorhanden ist.
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);
}
Ich denke nicht, dass das, was Sie tun, notwendigerweise falsch ist, aber wenn SomeDataAdapter tatsächlich eine Art zustandslosen Geschäftsdienst darstellt, dann wäre ein Singleton die beste Vorgehensweise dafür. Ich hoffe, das hilft! Das angegebene Beispiel ist eine hervorragende Möglichkeit, um sicherzustellen, dass der _appleService nicht in Konflikt gerät, wenn er null ist und zwei oder mehr Threads gleichzeitig auf ihn zugreifen.
Weißt du was? Wenn SomeDataAdapter ein ADO-IDbDataAdapter ist (was mit ziemlicher Sicherheit der Fall ist), ignorieren Sie diese gesamte Antwort!
: P
Ich habe keine Berechtigung, der ursprünglichen Frage einen Kommentar hinzuzufügen, aber wenn Sie angeben könnten, wo dieser Code vorhanden ist.
Wenn dieser Code eine benutzerdefinierte Implementierung eines IDbDataAdapters darstellt und UpdateData eine IDbConnection, einen IDbCommand erstellt und alles hinter den Kulissen verkabelt, dann würde ich keinen Codegeruch in Betracht ziehen, da es sich jetzt um Streams und andere handelt Dinge, die entsorgt werden müssen, wenn wir damit fertig sind.