Qu'entendez-vous par validation ? Et qu'est-ce qui vous fait penser que le code qui fait partie d'une instance du design pattern Factory est différent de tout autre code ?
Si vous entendez par validation la vérification des valeurs d'entrée lues par l'utilisateur ou un fichier d'entrée, la réponse est la suivante pas de le code d'analyse syntaxique de l'entrée est responsable de la validation, et non une usine qui utilise ensuite les valeurs lues.
Si vous entendez par validation le fait que les méthodes de l'usine vérifient que leurs appelants ont fourni des valeurs conformes aux conditions préalables de ces méthodes, la réponse est la même que pour toute autre méthode qui impose des conditions préalables à ses arguments : le style consensuel pour Java est que les méthodes vérifient leurs conditions préalables et lancent une erreur de type RuntimeException
si les conditions préalables ne sont pas remplies.
En pratique, cela signifie que certaines valeurs d'entrée seront vérifiées deux fois. D'abord par le code de validation de l'entrée, et ensuite par les vérifications de précondition de l'usine. C'est en partie le coût de la décomposition du code en modules (ici, un module d'entrée et une couche de service séparés).
Mais il permet aussi aux contrôles de faire des rapports différents, plus appropriés à leurs objectifs.
- Un échec de la vérification de la condition préalable (dans l'usine dans ce cas) indique un bogue dans le programme. Nous voulons que l'échec de la précondition soit signalé rapidement et durement, avant que l'état du programme ne soit modifié, afin d'obtenir les informations les plus utiles pour le débogage (dans de nombreux cas, l'emplacement du bogue sera une méthode dans la pile d'appels).
- Pour les échecs de validation de l'entrée, nous voulons typiquement que le programme signale autant de défauts dans l'entrée qu'il le peut pour une analyse de l'entrée, afin que l'utilisateur puisse les corriger tous. Pensez au compilateur que vous utilisez : vous seriez frustré s'il s'arrêtait après avoir trouvé la première erreur de syntaxe dans votre code source. Lancer des exceptions pour mettre en œuvre cette méthode est inapproprié. Le code doit prendre note de l'erreur et poursuivre l'analyse, si possible, plutôt que de s'éjecter vers une partie supérieure du programme (ce que fait le lancement d'une exception).