Frage

Ich arbeite an einer Java -Webanwendung und habe ein paar Fragen zum Design.

Grundsätzlich in seiner aktuellen Version, es stützt sich stark von der Erfassung von Ausnahmen, um den Kontrollfluss zu bestimmen.

Zum Beispiel habe ich in einer meiner Spring -Service -Klassen die folgende Methode, mit der in der Datenbank eine E -Mail als Parameter vorhanden ist.

@Override
public boolean validateEmailAddressDoesNotExist(String accountEmailAddress) {
    try {
         return !dao.checkIfEmailAddressAlreadyExists(accountEmailAddress);
    } catch (NoResultException re) {
        log.error("NoResultException", re);
    } catch (RuntimeException re) {
        log.error("RuntimeException", re);
    }
    return true;
}

//from "dao" class
public boolean checkIfEmailAddressAlreadyExists(String accountEmailAddress) {
    return (loadAccountFromAccountEmailAddress(accountEmailAddress) == null ? false : true);
}

//also from "dao" class
public Account loadAccountFromAccountEmailAddress(String accountEmailAddress) {
    return entityManager.createNamedQuery("Account.findByEmailAddress", Account.class).setParameter("accountEmailAddress", accountEmailAddress).getSingleResult();
}

Ich vermute, dass mein aktuelles Design wahrscheinlich falsch ist, aber ich wäre dankbar, Ihre Kommentare und Meinung dazu zu lesen, und inwieweit Sie glauben, dass es fehlerhaft ist.

War es hilfreich?

Lösung

Validierungsmethoden in Ihrem Servicemodell sollten keine Ausnahmen erfassen. Das ist aus ein paar Gründen schlecht:

  • Es ist kein außergewöhnlicher Zustand. "Keine Ergebnisse" ist eine häufige Situation.

  • Es Indirekt Paare Ihre Validierung für die Implementierung der Datenerziehungsmethoden des Frameworks. Um zu sehen, warum das nicht gut ist, stellen Sie sich vor, dass sich Ihr Rahmen so ändert EmptyResultSetException. Sie müssten alle Ihre Validierungsmethoden aktualisieren. Yikes!

Sie können es nicht unbedingt helfen, wenn Ihr zugrunde liegender Rahmen Ausnahmen auslöst, um "keine Ergebnisse" anzuzeigen, aber Sie können sicherlich steuern, was checkIfEmailAddressAlreadyExists tut.

Ändern Sie diese Methode, damit sie zurückgibt true Wenn die Adresse existiert und false Wenn dies nicht der Fall ist oder wenn keine Ergebnisse gefunden wurden.

Andere Tipps

Die allgemeine Faustregel lautet, dass Ausnahmen für "außergewöhnliche" Bedingungen gelten.

Wenn also ein Datenelement vorhanden ist oder vernünftigerweise nicht vorhanden ist, wäre die Rückgabe eines Booleschen normaler. Es führt normalerweise auch zu einem einfacheren, klareren Code.

Sie können dann Ausnahmen für wirklich außergewöhnliche Bedingungen wie Netzwerkausfälle usw. speichern.

In einigen Fällen geben Ihnen Bibliotheken der Drittanbieter möglicherweise keine Wahl - wenn sie Ausnahmen werfen, müssen Sie sich mit ihnen befassen!

Ich ziehe es vor, einen Booleschen von Methoden wie CheckIfemailAddressalreadyexists zurückzugeben und den Fluss einfach basierend auf dem Rückgabewert zu steuern und Ausnahmen für wirklich außergewöhnliche Bedingungen zu hinterlassen, ohne beispielsweise eine Verbindung zur Datenbank herzustellen.

Ich bin kein Java -Programmierer, habe ihn nie verwendet.

Aber ich weiß, dass die Erhöhung und Fangen von Ausnahmen in C# World sehr teuer ist. Die Kontrolle des Flusses mit ihnen ist also sehr ineffizient, anstatt die Dinge selbst zu überprüfen und Ausnahmen für Dinge zu verlassen, die Sie nicht als als angesehen haben DNA sagte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top