Je ne suis pas sûr de savoir comment construire la question, mais je suis curieux de savoir ce que vous pensez des situations suivantes et laquelle préférez-vous.Comportement explicite avec les contrôles par rapport au comportement implicite
Nous travaillons sur une application client-serveur avec des winforms. Et nous avons un contrôle qui a des champs calculés automatiquement en remplissant un autre champ. Nous avons donc une devise de champ qui, lorsqu'elle est remplie par l'utilisateur, détermine un remplissage automatique d'un autre champ, peut-être plus de champs.
Lorsque l'utilisateur remplit le champ de devise, un objet Devise est extrait d'un cache en fonction de la chaîne introduite par l'utilisateur. Si la devise entrée n'est pas trouvée dans le cache, une référence nulle est renvoyée par l'objet cache. Plus bas lorsque vous demandez à la couche application de calculer les autres champs en fonction de la devise, une zone spécifique nulle sera renvoyée si vous avez une devise nulle. De cette façon, le comportement implicite par défaut est d'effacer tous les champs. Quel est le comportement attendu. Juste pour le rendre plus clair, quand l'utilisateur entre une "monnaie non disponible" il est averti, bien sûr, mais aussi les champs qui dépendent de la devise entrée devraient être effacés. Cela est effectué en définissant les valeurs de contrôle spécifiques à null. Ce que j'appellerais l'implémentation explicite serait de vérifier que l'objet Currency est null, auquel cas les champs dépendants sont effacés explicitement.
Je pense que cette dernière version est plus claire, moins sujette aux erreurs et plus testable. Mais cela implique une forme de redondance. La version précédente n'est pas aussi claire et implique un certain comportement de la couche application qui n'est pas exprimé dans les tests. Peut-être dans les tests de la couche inférieure, mais quand le besoin se fait sentir de modifier les couches inférieures, de sorte que, compte tenu d'une monnaie nulle, quelque chose d'autre devrait être retourné, je ne pense pas qu'un test qui dit cela sans motivation introduire un bug dans les couches supérieures.
Qu'en pensez-vous?
Je savais que mon explication était assez boiteuse. Désolé. Le cache de devise retourne maintenant un objet nul. Sur la base de null, la couche application retourne à nouveau null pour les champs dépendants, qui réappliqué sur la vue effacerait les contrôles – Silviu