J'ai lu quelques questions et réponses concernant les exceptions et leur utilisation. Semble être une opinion forte que les exceptions doivent être soulevée que par exception non gérée cas. De sorte que me conduire à se demander comment la validation fonctionne avec business objects.
Disons que j'ai un objet métier avec des getters/setters pour les propriétés de l'objet. Disons que j'ai besoin de valider que la valeur est comprise entre 10 et 20. C'est une règle d'entreprise de sorte qu'il appartient à mon objet de l'entreprise. De sorte que semble dire pour moi que le code de validation va dans mon setter. Maintenant, j'ai mon INTERFACE utilisateur lié aux données sur les propriétés de l'objet de données. L'utilisateur entre 5, de sorte que la règle doit échouer et l'utilisateur n'est pas autorisé à sortir de la zone de texte. . L'INTERFACE utilisateur est lié aux données de la propriété de sorte que le poseur va être appelé, la règle vérifiée et a échoué. Si j'ai soulevé une exception de mon business object-à-dire la règle d'échec, l'INTERFACE utilisateur serait de ramasser ça. Mais cela semble aller à l'encontre de l'usage privilégié pour les exceptions. Étant donné que c'est un setter, vous ne vont pas vraiment avoir un "résultat" pour le setter. Si j'ai mis un autre drapeau sur l'objet alors qu'impliquerait l'INTERFACE utilisateur doit vérifier que le drapeau après chaque interaction de l'INTERFACE utilisateur.
Alors, comment devriez-le travail de validation?
Edit: j'ai probablement utilisé un exemple simplifié ici. Quelque chose comme la gamme case ci-dessus pourrait être facilement manipulé par l'INTERFACE utilisateur, mais que faire si le valdation était plus compliquée, par exemple, l'objet de l'entreprise calcule un nombre en fonction de l'entrée et si le nombre calculé est hors de portée, il devrait être recjected. C'est d'une logique plus compliquée que ne devrait pas être dans l'INTERFACE utilisateur.
Il y a aussi la considération de nouvelles données entrées basées sur un terrain déjà entré. e.g.- Je entrer un élément de l'ordre pour obtenir un certain informaion comme en stock, du coût actuel, etc. L'utilisateur peut avoir besoin de cette information pour prendre des décisions sur la poursuite de l'entrée (comme le nombre d'unités à commander) ou il peut être nécessaire afin de poursuivre la validation à faire. Si un utilisateur d'être en mesure d'entrer dans d'autres domaines si l'élément n'est pas valide? Quel serait le sens?