ich im Moment etwas langweilige Muster bin mit Fehlermeldung für den Benutzer zu erzeugen, eine lange Operation ausgeführt wird:Unterbrechung lang Methode Muster läuft
string _problem;
void SomeLongRunningMethod()
{
try
{
_problem = "Method1 had problem";
Method1();
_problem = "Unexpected error during doing something in Method2";
if(Method2())
{
_problem = "Method3 fails";
Method3();
}
_problem = "Not possible to obtain data";
var somedata = Method4();
}
catch(Exception)
{
MessageBox.Show("Problem with some long running method: " + _problem);
}
}
Beide Methoden werfen kann, und ich will den Benutzer sagen, an dem Scheitern Schritt tritt ein. Dies geschieht durch Setzen von _problem
vor mit einem von ihnen.
In einigen Fällen kann ich verschiedene Exception
Arten zu fangen, aber das funktioniert nicht immer, z. sowohl Method1
als auch Method2
können throw InvalidOperationException()
.
Dieser wiederholte Code sieht wie ein Muster aus. Obwohl ich es nicht erkennen kann. Irgendwelche Ideen? Wie verbessert man die Lesbarkeit?
Ich nehme einfach an, dass das Beispiel übermäßig vereinfacht ist und Sie * * * * erkennen, dass Sie die Ausnahme anzeigen (oder protokollieren) müssen Details (oder Sie haben eine Deb ugging Alptraum, wenn der Kunde anruft und sagt Ihnen "Methode 3 schlägt fehl, was soll ich jetzt tun?"). Abgesehen davon: Sehr gute Frage! – Heinzi
@ Heinzi, ja, das ist ein vereinfachtes Stück, das ich verbessern möchte. Wenn "Methode 3" fehlschlägt, gibt es eine gute * verwandte * Nachricht, z. Wenn es eine Methode ist, welche Abfragedatenbank wird es dem Benutzer sagen: "Datenbankproblem" (es macht keinen Sinn, Benutzerausnahme anzuzeigen, z. B. "NullReferenceException"). Damit kann der Benutzer das melden oder sogar ** versuchen, etwas zu tun (es gibt Datenbank-Service-Menü, um häufige Probleme zu beheben, etc.). Außerdem werden alle Probleme protokolliert, so dass ich genau sehen kann, was auf welcher Linie passiert. – Sinatr