ich bin nun schon seit mehreren Stunden auf der Suche nach einem Für
und Wieder für statische Methoden bzw. dem Singleton Pattern.
Ich arbeite mit Schichtentrennung. In der Logik-Schicht, habe ich
bisher immer alle Methoden und Klassen als statisch gekennzeichnet.
Diese Methoden nehmen meine Business-Objekte entgegen und verarbeite
dann diese.
Was spricht bei einem solchen Anwendungsfalls für die statischen
Klassen? Wäre es besser das Singleton-Pattern zu verwenden. Wenn ja
warum?
Ich freue mich auf die Meinungen zu dem Thema.
Lieben Gruß,
Tim
Hallo Tim,
die Instanz einer Klasse nach dem Singleton Entwurfsmuster ist doch
eine wie jede andere Klasse auch. Lediglich das erzeugen der Klasse
bzw. liefern der Instanz geschieht durch eine statische Methode, weil
der Konstruktor privat ist. Du hast es also auch bei einem Singleton mit
einer Klasse zu tun die nicht-statische Methoden haben kann, im
Gegensatz zu Deinen bisher verwendeten statischen Klassen mit ihren rein
statischen Methoden. Singleton bedeutet ja nur dass es nur eine Instanz
geben kann und nicht dass der Singleton statisch ist.
Gruß,
Peter
> Ich arbeite mit Schichtentrennung. In der Logik-Schicht, habe ich
> bisher immer alle Methoden und Klassen als statisch gekennzeichnet.
Die allererste Frage lautet da für mich: Warum?
> Diese Methoden nehmen meine Business-Objekte entgegen und verarbeite
> dann diese.
Ich kann mir aber durchaus Fälle vorstellen, wo mehrere Instanzen sinnvoll
sind.
> Was spricht bei einem solchen Anwendungsfalls für die statischen
> Klassen?
IMO recht wenig... Der klassische Fall für statischen Methoden sind Tools,
also sehr unspezifische Dinge, die man ohne Instanzierung (auch ohne
Konstruktor-Parameter!) ansprechen kann/will.
> Wäre es besser das Singleton-Pattern zu verwenden. Wenn ja
> warum?
Bei einer Singleton-Klasse hast du die (vielen!) Vorteile einer "echten"
Klasse, sorgst aber dafür, dass es immer nur eine Instanz davon geben kann.
Das mag durchaus sinnvoll sein, dafür kenne ich deine Anwendung zu wenig...
Gute Nacht
Gottfried
--
Home: www.develes.net
Mail: g...@develes.net
> ich bin nun schon seit mehreren Stunden auf der Suche
> nach einem Für und Wieder für statische Methoden
> bzw. dem Singleton Pattern.
Es gibt da eine Reihe von Argumenten bei
dem Thema "Statische Klassen versus Singlentons".
Ich werde da lieber auf ein paar gute Links
diesbzgl. verweisen, anstatt hier alles noch mal
zu wiederholen.
Allerdings das eine doch kurz betont, obgleich ein
Singleton ein vergleichsweise einfaches Pattern ist,
gibt es die verschiedensten Vor- und Nachteile, die letztlich
von den unterschiedlichen Implementationen abhängen.
zum Beispiel die Implementierungen:
"Static Initialization", "Multithreaded Singleton", oder
"Singleton" haben alle jeweils andere Vor- und
Nachteile, je nach Anforderung.
[Implementing Singleton in C#]
http://msdn.microsoft.com/en-us/library/ms998558.aspx
[Implementing the Singleton Pattern in C#]
http://www.yoda.arachsys.com/csharp/singleton.html
[C# - Singleton Pattern vs. Static Classes | .NET Zone]
http://dotnet.dzone.com/news/c-singleton-pattern-vs-static-
[Singleton (Entwurfsmuster) - Wikipedia]
http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)
[Singleton Design Pattern in C# and VB.NET.]
http://www.dofactory.com/patterns/PatternSingleton.aspx
[Singleton als vererbte Klasse am Beispiel C#]
http://www.josupeit.com/front_content.php?idart=23
[Statische Klassen und statische Klassenmember (C#)]
http://msdn.microsoft.com/de-de/library/79b3xss3(VS.80).aspx
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Das den Link abschließende "Minus" in der Browseradresszeile mit
eingeben - sonst wird die Seite nicht gefunden...
:-)
Viele Grüße
Harald M. Genauck
"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)
> > [C# - Singleton Pattern vs. Static Classes | .NET Zone]
> > http://dotnet.dzone.com/news/c-singleton-pattern-vs-static-
>
> Das den Link abschließende "Minus" in der Browseradresszeile mit
> eingeben - sonst wird die Seite nicht gefunden...
in einigen Newsreader wird der Link falsch (ohne abschliessendes
Minus)
geparst. So einen benutzt Du wahrscheinlich gerade.
In anderen kann einfach auf den Link geklickt werden, etwa hier:
http://groups.google.com/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/c0daf368896f2bd0
"Harald M. Genauck" <hmg.ng.e...@aboutvb.de> schrieb:
>> [C# - Singleton Pattern vs. Static Classes | .NET Zone]
>> http://dotnet.dzone.com/news/c-singleton-pattern-vs-static-
>
> Das den Link abschließende "Minus" in der Browseradresszeile mit
> eingeben - sonst wird die Seite nicht gefunden...
> :-)
Stimmt. Bei OE bzw. WM ließe sich dieses Problem vermeiden, indem man den
Link zwischen spitze Klammern setzt ("<...>"). Bei der von mir präferierten
"<URL:...>"-Schreibweise werden URIs leider im Textmodus nicht als Hyperlink
dargestellt.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
> ... WM ließe sich dieses Problem vermeiden, indem
> man den Link zwischen spitze Klammern setzt ("<...>").
Nein, da würde bei Deiner Schreibweise fälschlich der Link
mit "/" zusätzlich aufgerufen (das ist eine andere URL!). Einige
Webseiten reagieren darauf mit Fehler.
Eigentlich ist man immer auf den Parser in
des Readers angewiesen. Insofern ist es eh
einfacher ohne diese unnötigen Geschreibsel
(das bevorzuge ich)
Es gibt IMHO keine Schreibweise, die in allen
Readern korrekt verlinkt wird. Die
"<URL:...>"-Schreibweise hat auch noch ein
paar andere Nachteile.
Beachte, dies ist aber hier ein C# Gruppe,
dieses Thema gehört in andere Gruppen,
deswegen von meiner Seite mal ein EOT,
an der Stelle.
> "<URL:...>"-Schreibweise werden URIs ...
LOL, schau Dir diesen merkwürden Auszug
mal in WM an ;-)
"Frank Dzaebel" <po...@franksseite.de> schrieb:
>> ... WM ließe sich dieses Problem vermeiden, indem
>> man den Link zwischen spitze Klammern setzt ("<...>").
>
>Nein, da würde bei Deiner Schreibweise fälschlich der Link
>mit "/" zusätzlich aufgerufen (das ist eine andere URL!). Einige
>Webseiten reagieren darauf mit Fehler.
Das hängt, wie Du richtig feststellst, wiederum vom Newsreader ab. WM auf
Windows Vista mit IE7 als Standardbrowser würde die Adresse ohne angehängtes
"/" aufrufen.
>Es gibt IMHO keine Schreibweise, die in allen
>Readern korrekt verlinkt wird. Die
>"<URL:...>"-Schreibweise hat auch noch ein
>paar andere Nachteile.
Das stimmt allerdings ;-).
vielen Dank für deine Antwort.
Gottfried Lesigang wrote:
> Grüß dich Tim!
>
> > Ich arbeite mit Schichtentrennung. In der Logik-Schicht, habe ich
> > bisher immer alle Methoden und Klassen als statisch gekennzeichnet.
>
> Die allererste Frage lautet da für mich: Warum?
Weil ich es bisher nicht anders wusste. Ich möchte schnell auf Methoden
zugreifen, ohne eine Klasse inztaziieren zu müssen. Erst vor kurzer
Zeit habe ich vom Singleton gehört.
> > Diese Methoden nehmen meine Business-Objekte entgegen und verarbeite
> > dann diese.
>
> Ich kann mir aber durchaus Fälle vorstellen, wo mehrere Instanzen
> sinnvoll sind.
Ja? Hättest du ein Beispiel?
> Bei einer Singleton-Klasse hast du die (vielen!) Vorteile einer
> "echten" Klasse, sorgst aber dafür, dass es immer nur eine Instanz
> davon geben kann. Das mag durchaus sinnvoll sein, dafür kenne ich
> deine Anwendung zu wenig...
Ist es denn besser als statische Methoden zu verwenden? Welche Vorteile
hätte ich?
Gruß,
Tim
vielen Dank für deine Antwort und die vielen Links.
Frank Dzaebel wrote:
> Allerdings das eine doch kurz betont, obgleich ein
> Singleton ein vergleichsweise einfaches Pattern ist,
> gibt es die verschiedensten Vor- und Nachteile, die letztlich
> von den unterschiedlichen Implementationen abhängen.
>
> zum Beispiel die Implementierungen:
> "Static Initialization", "Multithreaded Singleton", oder
> "Singleton" haben alle jeweils andere Vor- und
> Nachteile, je nach Anforderung.
Ich kann mir immer noch keine Vor- und Nachteile vorstellen. Ich
arbeite mit Web-Anwendungen. Wäre eine statische Klasse besser?
Gruß,
Tim
> vielen Dank für deine Antwort und die vielen Links.
gerne.
> [...]
> Ich kann mir immer noch keine Vor- und Nachteile vorstellen.
> Ich arbeite mit Web-Anwendungen.
> Wäre eine statische Klasse besser?
Das kommt wieder drauf an.
Goldene Regel: "Ganz gerenell sollte man
statische Klassen *sparsam* verwenden".
Prinzipiell hast Du es bei Webanwendungen
ja auch mit einem Multibenutzerszenario zu tun, wo
viele gleichzeitig arbeiten (können).
Infolgedesse ist fast immer an Multithreading
zu denken.
Jetzt käme der Einsatzzweck und Einsatzort
noch zum Tragen. Statische Klassen haben da
ggf. den Nachteil, dass alle Methoden threadsicher
gemacht werden müssen.
[Gewusst wie: Benachrichtigen einer Anwendung beim Entfernen eines
Elements aus dem Cache]
http://msdn.microsoft.com/de-de/library/7kxdx246.aspx
Ich kenne den Einsatzzweck ja noch nicht,
denn ich weiss nicht, was Deine Methoden machen.
Aber durch Deine Präzisierung sieht es schon
"~eher" nach multithreaded Singleton aus.