Ich finde das nicht in Nutzungsszenarien für das Besuchermuster (oder vielleicht bekomme ich es nicht). Es ist auch nicht hierarchisch.Besucher Muster gegen Bedingungen?
Verwenden wir ein Authentifizierungsbeispiel. Ein UserAuthenticator authentifiziert die von einem Benutzer angegebenen Anmeldeinformationen. Es gibt ein Ergebnisobjekt zurück. Das Ergebnisobjekt enthält das Ergebnis der Authentifizierung: Authentifizierung erfolgreich, nicht erfolgreich, weil Benutzername nicht gefunden wurde, nicht erfolgreich, weil ungültige Zeichen verwendet wurden usw. Clientcode kann auf Bedingungen zurückgreifen, um dies zu behandeln. In Pseudo-Code:
AuthResult = Userauthenticator.authenticate(Username, Password)
if AuthResult.isAuthenticated: do something
else if AuthResult.AuthFailedBecauseUsernameNotFound: do something else
else if etc...
Würde ein Besuchermuster hier passen? :
Authresult.acceptVisitor(AuthVisitor)
Authresult ruft dann eine Methode auf AuthVisitor auf das Ergebnis je:
AuthVisitor.handleNotAuthenticatedBecauseUsernameNotFound
Ich bin nicht damit einverstanden, nicht zu verwenden, wofür sie nicht gemacht wurden. Etwas kann ein Problem lösen, ohne dass es dazu gedacht ist. Wenn das Besuchermuster mein Problem auf eine gute Weise löst, warum sollte ich es dann nicht benutzen? Die Frage wird dann: ist die Lösung gut? Niemand, der es so benutzt, bedeutet nicht, dass es eine schlechte Lösung ist, obwohl es in diese Richtung deuten könnte. Wichtiger ist, warum es eine gute oder schlechte Lösung ist. Wenn McGyver Ihren Rat nahm, wäre er arbeitslos. – koen
Eine andere Sache ist: Die Art, wie die Authentifizierung gehandhabt wird, ist für das Beispiel agnostisch. Ich sehe nicht, warum mein Beispiel UserAuthenticator auf nur eine Art der Authentifizierung beschränkt (zB nur LDAPUserAuthentication, OpenIdUserAuthentication usw.) – koen