2016-08-08 36 views
3

Also, mit "Let It Crash" Mantra Erlang-Code soll resistent gegen grausame Ereignisse wie unerwartete ziehen den Stecker, Hardware-Fehler und instabile Netzwerkverbindungen sein.Wann "lasst es abstürzen" und wann soll der Code in Erlang verteidigt werden?

Auf der anderen Seite gibt es defensive programming.

Ich bin neu in Erlang, ich frage mich, wie zu wissen, wann ich den Prozess nur abstürzen will und wenn ich will, dass es den Fluss mit if, case..of verteidigen, geben Sie Wachen?

Angenommen, ich habe ein Authentifizierungsmodul, das bei erfolgreicher Authentifizierung true/ zurückgeben kann. Sollte es nur ein erfolgreiches Szenario geben und abstürzen, wenn die Benutzerauthentifizierung aufgrund eines falschen Login/Passwortes fehlschlägt?

Wie sieht es mit anderen Szenarien aus, z. B. ob ein Produkt nicht in der Datenbank gefunden wird oder die Suchergebnisse leer sind?

Ich kann, glaube ich, Verteidigungskonstrukte nicht vollständig ignorieren, da irgendwelche Wächter in ihrer Natur sind, den "normalen" Fluss der App zu verteidigen?

Gibt es eine Faustregel zur Verteidigung und wann zum Absturz?

Antwort

4

Wie Fred Hebert sagt bei http://ferd.ca/the-zen-of-erlang.html -

Wenn ich weiß, wie man einen Fehler zu behandeln, in Ordnung, ich, dass für diese spezifischen Fehler machen kann. Ansonsten lass es einfach krachen!

Ich würde sagen, dass Authentifizierungsfehler, leere Suchergebnisse usw. Fehler und solche sind, die eine angemessene Reaktion auf den Benutzer garantieren.

2

Ich glaube nicht, dass es tatsächlich eine Daumenregel in diesem Fall gibt.

Wie ich sehe, wann immer Sie wissen, wie man einen erwarteten Fehler behandelt - behandeln Sie es. Im Falle der Authentifizierung denke ich nicht wirklich, dass es ein tatsächlicher Fehler ist, es ist ein normales Verhalten, also gehen Sie voran und schreiben Sie einige Zeilen Code, um diesen speziellen Fall zu behandeln.
Im Gegensatz dazu, Netzwerk-Fehler ist etwas, das aus verschiedenen Gründen passieren kann, sie sind nicht wirklich als Teil des normalen Verhaltens Code erwartet, so würde ich in diesem Fall mit der "Let it crash" Philosophie gehen.

Wie auch immer, wenn Sie mit gehen lassen Sie es Absturz - natürlich müssen Sie noch den Fall behandeln, wo der Prozess abgestürzt ist (d. H. Mit Links und Monitore und Neustart des Prozesses).

Bitte überprüfen Sie auch this very good answer. Und Sie können mehr darüber lesen here und here.