2 Stimmen

Best-Practices: Action-Enum-Verwendung für Ereignisse

Ich finde es schwierig, Action Enums für Ereignisse zu entwerfen.

z.B. Berechnungsprozessor.

Ich sollte also eine Aufzählung wie diese haben:

public enum CalculatorCoreActions
{
    ProcessStarted,
    ProcessFinished,
    ProcessFailure,
    ProcessFailed,
    SubstractionStarded,
    SubstractionFinished,
    SubstractionFailure,
    SubstractionFailed,
    <etc.>...
}

Oder ich sollte zwei enums ? machen, z.B:

public enum CalculatorAction
{
    Process,
    Substraction,
    Division
}

public enum CalculationActionResult
{
   Started,
   Finished,
   Failure,
   Failed
}

Oder sollte ich sogar eine neue Klasse erstellen?

public class CalculatorActionEventArgs : EventArgs {<...>}
public class CalculatorActionFailedEventArgs : EventArgs {<...>}
public class etc... : EventArgs {<...>}

Welche Methode ist Ihrer Meinung nach die beste?

2voto

Pontus Gagge Punkte 16933

Was versuchen Sie zu tun? Wofür wollen Sie die Enums verwenden? Ihr erstes Beispiel mag für sehr wenige Kombinationen ausreichen, während das zweite Beispiel zwar komplexer, aber viel sauberer und einfacher zu erweitern ist.

Ich vermute, dass Sie in der Lage sein wollen, den Status der Berechnung anzuzeigen und vielleicht auf den Status zu reagieren, z. B. bei der Fehlerbehandlung. Sie könnten die Staat o Zustandsmaschine Patterns statt Enums, um große Switch-Anweisungen für Ihre Enums zu vermeiden.

2voto

Dan Blair Punkte 2379

Von den beiden von Ihnen vorgeschlagenen Aufzählungen würde ich mich für die zweite Variante entscheiden.

Nun, wenn man die Staaten mit den Aktionen kreuzt (wörtlich: multipliziert), ergibt sich ein großes Wachstumsmuster. Wenn man in der Zukunft entweder einen Zustand oder ein Merkmal hinzufügen möchte, fügt man nicht mehr ein Element hinzu, sondern 1xM oder Nx1 Elemente. Weitere Verweise auf diese Art von Problem finden Sie unter Martin Fowler's livre Refaktorierung und objekthierarchische Verflechtung.

Für die Ereignis-Args verwenden Sie das generische EventArgs und geben ihm die Aktion und den Zustand in einem Objekt. Erstellen Sie nicht mehr Dinge, als Sie müssen, und es wird die Anzahl der Kopfschmerzen, die Sie erstellen zu minimieren.

0voto

Usman Masood Punkte 1877

Es hängt davon ab, wie Sie Ihre Struktur entwerfen... für mich Ereignisse sollten unterschiedlich sein, aber man sollte versuchen, nicht mehrere EventArgs z.B. wie Sie verwenden eine für fehlgeschlagene eine für Action etc.... verwenden Versuchen Sie stattdessen, ein Minimum an Ereignisargumenten zu verwenden, da es sich nur um Ihren Datenübertragungsmechanismus handelt...

jetzt in Bezug auf Aufzählung Teil bin ich nicht genau in der Lage zu holen Ihr Szenario.... warum Sie so viele verschiedene Aufzählungen wollen?

wenn Sie bedeutete, es als Ersatz für mehrere Ereignisse als zu verwenden... wenn ich Sie waren, als ich für Ereignisse gehen... aber wenn Ihre Struktur erfordert eine große Menge von Ereignissen sagen 10 oder mehr als gehen für eine Mischung Mischung von Ereignissen mit enum als Minimum Ereignis args... sagen im Falle von 10 reduzieren Ereignisse auf 3 mit 4 oder 5 enums

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X