Wie man sich eine Grube gräbt (5)
MOSS Sharepoint C#
oder wie man ein verstecktes Singelton falsch implementiert, am Beispiel eines Event-Handlers in Sharepoint
Kategorie oder wie man ein verstecktes Singelton falsch implementiert, am Beispiel eines Event-Handlers in Sharepoint
Also bei der Programmierung es Eventhandlers in Sharepoint überschreibt, man z.B. die Methode
ItemAdding( .... )
Als Argument bekommt, man die Properties mit, diese enthalten eine SiteID beinhalten, wenn man nun auf eine bestimmte Liste zugreifen möchte ist Code wie der folgende evtl. unerlässlich:
using (SPSite site = new SPSite(properties.SiteId)) {
using (SPWeb web = site.OpenWeb()) {
_list = web.Lists"UpdateLog";
}
}
Natürlich ist das öffnen der Site und des Web ein wenig intensiv - Ressourcen und Performance. Was denkt sich der geneigte Programmierer???
Ich mache mir eine Member und speichere es darin, und erweitert den Code ungefähr wie folgt:
if (_list == null) {
using (SPSite site = new SPSite(properties.SiteId)) {
using (SPWeb web = site.OpenWeb()) {
_list = web.Lists"UpdateLog";
}
}
}
Und schon habe ich ein Singelton in einer Member.
Das Gute an dieser Implementierung ist, wenn der Aufrufer des EventHandlers immer ein neues Objekt instanziiert, dann läuft es. Ist zwar ein wenig zuviel Code, aber es läuft!
(Denn _list ist immer null!)
Wird aber keine neue Instanz des Objektes erzeugt, dann läuft es ohne Multi-Threading auch, aber bei einem Bulk-Update im Edit-Sheet kann es zu Problemen kommen
Wenn der geneigte Programmierer die Doku gelesen hätte, hätte er folgendes finden können ->
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe. |
Manchmal habe ich den Eindruck, dass die Software Industrie eigentlich nur aus Personen besteht, welche mit minimalen Wissen was ausprobieren
Ist dies eigentlich in anderen Berufen auch so..... Stelle mir gerade vor, dass ich ein Französisches Baguette bei meinem Bäcker kaufe und zu Hause entsetzt feststelle, dass es nach Kürbiskern-Brot steht.
Auf Nachfrage antwortet der Bäcker, sorry hatte nicht auf den Inhalt geschaut, aber gedacht, die Backmischung wäre schon die Richtige
Also nix für ungut!
Gruß JJR