2009-09-20 10 views
6

Ich habe mich gefragt, was der ausgenommene Standard für die Handhabung von Fehlern im Modell ist.Fehlerbehandlung im Modell (MVC)

Derzeit habe ich 'setError' und 'getError' Methoden, die von allen meinen Modellen verwendet wird.

Das bedeutet, dass ich mich nur darum kümmere, ob ein Aufruf einer Methode in meinem Modell wahr oder falsch ist. Wenn es falsch ist, würde ich $this->model->getError() in meinem Controller verwenden.

Zusätzlich überlege ich, eine separate Datei einzurichten, die alle meine Fehler enthält. Eine Datei pro Modell, wollte auch darüber Gedanken haben.

Antwort

3

Eine einfachere Lösung wäre exceptions zu verwenden.

Wenn ein Fehler auftritt, der einem Benutzer angezeigt wird, müssen Sie eine spezielle Ausnahme auslösen - vielleicht mit dem Namen UserError. Die Ausnahme sollte den Text der Fehlermeldung enthalten, wenn Sie sie werfen. Diese Arten von Fehlern sind Funktionen die Benutzer mit nützlichen Informationen zur Verfügung stellen (dh sie versucht, etwas zu löschen, die nicht existieren - was passieren kann, wenn sie mehrere Browser geöffnet haben, etc.)

zB:

throw new UserError("That object no longer exists."); 

Wenn ein Fehler auftritt, den Sie vor dem Benutzer verbergen möchten, werfen Sie eine andere Art von Ausnahme auf, möglicherweise mit dem Namen InternalError. Sie möchten log dies und ermöglichen das Programm fortzusetzen, so dass der spezifische Fehler vom Benutzer ausgeblendet wird. Wenn etwas verhindert wird, können Sie eine generische Fehlermeldung ausgeben. Diese wären Bugs und Sie möchten sie so schnell wie möglich beheben.

z.B .:

throw new InternalError("Failed to connect to remote service"); 

Alle Fehlermeldungen gespeichert werden können (hartcodiert) in der Quelle, wo die Ausnahme ausgelöst wird. Dies ist nicht unbedingt eine schlechte Design-Praxis - wenn Sie ein Werkzeug wie gettext verwenden, können Sie alle diese Nachrichten leicht übersetzen.

+0

Ich mag diese Idee, der einzige Vorbehalt ist, wenn es mehrere Fehler gibt, idealerweise möchte ich den Fehler eine fortfahren Ausführung aufzeichnen. Deshalb habe ich setError und getError verwendet. Ich überprüfe, ob die Rückgabe wahr ist, was bedeutet, dass alle Aktionen erfolgreich waren und wenn nicht, bekomme ich den Fehler. Eine Aktion ist teilweise erfolgreich, und als Ergebnis möchte ich false zurückgeben und getError verwenden, um eine Nachricht zu erhalten, die angibt, welcher Teil nicht erfolgreich war. Hoffnung, die Sinn macht. – Andre

1

Ich habe Log4j und Log4cxx und Logging zu einem syslogd verwendet. Kiwi ist ein einfacher Win32-Syslogger, der Ihre Log-Nachrichten protokolliert und in einer Datei speichert. Log4j/Log4cxx verfügt über Konfigurationsdateien, mit denen Sie alle Ihre Protokollebenen einrichten oder Nachrichtenziele protokollieren können (Sie können sich an mehreren Orten anmelden).

Es braucht so wenig Aufwand einzurichten und zu verwenden, und es funktioniert wie ein Charme.

Ich habe nicht selbst log4php ausprobiert.

Ausnahmen sind gut, wenn das Programm nicht mehr ausgeführt werden soll. Fangen Sie Exceptions auf einer hohen Ebene ein, auf denen Sie den Ausfall fehlgeschlagener Ausführungen akzeptieren können.