Ich habe Code sehr ähnlich zu diesem Beispiel dreimal in einem Code hinter. Jedes Mal, wenn der Switch von einer Option, die an ihn gesendet wird, ausschaltet. Jeder Zeit der Code innerhalb des Falles ist genau das gleiche außer für einen Parameter basierend auf dem Fall. Verwendet einen Schalter / Fall und Methoden den besten Weg um dies zu tun? Sollte ich an etwas Designmuster denken, um die repetitive Switch / Case-Struktur zu vermeiden?
%Vor%Compiler sind sehr gut darin, Switch / Case-Konstrukte zu optimieren; Die CLR wird es wahrscheinlich in eine Nachschlagetabelle oder etwas Ähnliches verwandeln, so dass das Hand-Rolling einer eigenen Version, wie Henk Holterman es vorschlägt, nicht das ist, was ich empfehlen würde. Die CLR kann bei der Auswahl des besten Algorithmus einen besseren Job machen als Sie.
Wenn es sich um ein Problem von Eleganz oder Wartungsfreundlichkeit handelt und Sie mehrere Schalter / Fälle über die gleiche Klasse verstreut haben, die ähnliche Funktionen ausführen, dann ist eine Möglichkeit, sie zu verbessern, die gesamte Funktionalität eines einzigen "Falls" zu kapseln eigene Klasseninstanz, so:
%Vor%Dann in Ihrer Klasse / Kontrolle / Seite:
%Vor%Danach können Sie Ereignisse und andere Methoden starten:
%Vor%Natürlich ist dies nur ein nützliches Muster, wenn Sie mehrere dieser Schalter / Fälle haben, die Sie in einen umformen möchten. Wenn du nur einen Schalter / Fall hast, wirst du auf diese Weise viel mehr Code haben, also lass es in Ruhe!
Weitere Möglichkeiten zur Verbesserung der Wartbarkeit sind:
Das ist es. Es ist einfach zu schreiben, es ist leicht zu verstehen, es ist einfach zu warten, es spart Ihnen Zeit, wenn Sie viele Switch / Case-Konstrukte haben, und es ermöglicht der CLR immer noch die bestmöglichen Optimierungen durchzuführen. Die einzigen Kosten sind die geringe Menge an Speicher, die benötigt wird, um diese schreibgeschützten Felder zu halten.
Sie können eine Tabelle erstellen, um string
in parameter value
zu konvertieren.
Ich denke, ich würde die switch-Anweisung in eine separate Funktion verschieben und sie würde den Parameterwert für jeden Fall zurückgeben:
%Vor%Dann können Sie Ihre Arbeitsmethode einfach einmal aufrufen:
%Vor%Wenn Sie Ihre Arbeitsmethode nicht für die Standardursache ausführen möchten oder wenn Sie mehr als einen Parameterwert haben, können Sie die GetParameter-Methode ändern, um Ausgabeparameter zu verwenden:
%Vor%Und nenne es so:
%Vor%Der Schlüssel zu diesem Problem besteht darin, dass die in der dropDownList gespeicherten Objekte den Parameter bereitstellen (entweder direkt oder durch Indizierung in ein Array). Dann kann die switch-Anweisung vollständig entfernt werden.
Wenn der Parameter eine Eigenschaft des Objekts ist, das in der Dropdown-Liste angezeigt wird, liefert dies den Wert sehr effizient.
Wenn die Werte in der Dropdown-Liste einen numerischen Index in einem Array von Parameterwerten bereitstellen können, wird dies eine Reihe von String-Vergleichen in Bezug auf die Laufzeit-Effizienz übertreffen.
Jede dieser Optionen ist sauberer, kürzer und einfacher zu warten als das Einschalten einer Zeichenfolge.
Das ist wahrscheinlich zu viel für das, was Sie tun, aber der Code könnte sauberer werden.
%Vor%Dann wird der aufrufende Code ...
%Vor%Wie ich schon sagte, ist das Overkill, wenn Sie nur einen Parameter setzen (im Prinzip setzen Sie eine Eigenschaft in der Basisklasse aus der Kindklasse). Aber wenn Ihre Logik komplexer ist, könnte dies eine praktikable Option für Sie sein.
Hm, ich denke, dass eine sehr schnelle Lösung das Wörterbuch benutzt. Dictionary ist sehr schnell Struktur, wenn Sie einen Schlüssel verwenden - & gt; Wertlogik. Also, in Ihrem Fall können Sie das verwenden:
%Vor%Danach können Sie Ihre Funktionen für ALPHA, BRAVA, ... erstellen
%Vor%und schließlich eine Funktion zurückgeben:
%Vor%Ich hoffe, es hilft.
Tags und Links c# asp.net design-patterns