Je ne trouve pas cela dans les scénarios d'utilisation pour le modèle de visiteur (ou peut-être que je ne comprends pas). Ce n'est pas non plus hiérarchique.modèle de visiteur contre conditions?
Utilisons un exemple d'authentification. Un UserAuthenticator authentifie les informations d'identification fournies par un utilisateur. Il renvoie un objet résultat. L'objet résultat contient le résultat de l'authentification: authentification réussie, non réussie car le nom d'utilisateur n'a pas été trouvé, pas réussi car des caractères illégaux ont été utilisés, etc. Le code client peut avoir recours à des conditions pour gérer cela. En pseudocode:
AuthResult = Userauthenticator.authenticate(Username, Password)
if AuthResult.isAuthenticated: do something
else if AuthResult.AuthFailedBecauseUsernameNotFound: do something else
else if etc...
Est-ce qu'un modèle de visiteur s'adapter ici? :
Authresult.acceptVisitor(AuthVisitor)
Authresult appelle alors une méthode sur AuthVisitor en fonction du résultat:
AuthVisitor.handleNotAuthenticatedBecauseUsernameNotFound
Je ne suis pas d'accord pour ne pas utiliser ce pour quoi ils n'ont pas été faits. Quelque chose peut résoudre un problème sans qu'il soit prévu de le faire. Si le modèle de visiteur résout mon problème, dans un bon sens, pourquoi ne devrais-je pas l'utiliser? La question devient alors: la solution est-elle bonne? Personne ne l'utilise de cette façon ne signifie pas que c'est une mauvaise solution, même si cela peut laisser entendre dans cette direction. Plus important est pourquoi c'est une bonne ou une mauvaise solution. Si McGyver suivait votre conseil, il n'aurait plus de travail. – koen
Une autre chose est: la façon dont l'authentification est traitée est agnostique à l'exemple. Je ne vois pas pourquoi mon exemple limite UserAuthenticator à un seul moyen d'authentification (par exemple seulement LDAPUserAuthentication, OpenIdUserAuthentication etc) – koen