Je me demande quelle est la meilleure approche pour vérifier qu'une classe a tous les détails requis avant de pouvoir l'utiliser. Par exemple, disons que j'ai une classe Book
et que je souhaite transmettre un ensemble de propriétés à propos du livre au constructeur Book
.Comment vérifier une classe a toutes les propriétés configurées avant d'être utilisé?
Book book = new Book(bookProperties);
Ce que je veux vous assurer que BookProperties
est complète, à savoir a toutes les informations.
Disons que dans cet exemple, je donne les résultats suivants:
- Titre du livre
- Auteur
- livre original Publishing Date de
Une façon est que je pourrais créer un constructeur par défaut qui accepte seulement les 3 items:
BookProperties bookProperties = new BookProperties("2001: A Space Odyssey",
"Arthur C. Clarke",
1968);
Maintenant c'est ok, si nous avons seulement trois valeurs, mais disons que ma classe a 10 propriétés ou plus qui doivent être initialisées par l'utilisateur avant que la classe Book
puisse être créée.
Une chose que je pensais était d'avoir une méthode dans le BookProperties appelé isValid
. Puis dans le constructeur de la classe Book
je verrais si bookProperties.isValid
et j'affirmerais si le retour est faux.
Est-ce une bonne idée ou est-ce que je vais tout à fait faux?
Cependant, il peut être difficile de conserver des invariants de classe corrects à tout moment lorsque vous construisez une propriété d'état par propriété. Si vous ne faites pas attention, vous pouvez vous retrouver avec une classe qui a différents modes, selon si les propriétés ont été remplies ou non. Je préfère l'approche du générateur d'objet (BookProperties), mais en utilisant la syntaxe d'initialisation pour * it *, plutôt que la classe finale. –
Les directives officielles sont que l'ordre des propriétés de réglage ne devrait pas importer; donc ** si ** vous êtes dans ce scénario, les setters de propriété ne sont pas une solution appropriée. Mais la plupart du temps ce n'est pas le cas ... –
Je pense que je vais aller avec la méthode Validate() sur la classe des propriétés quand le constructeur du livre est appelé. Ensuite, il va erreur si le résultat est faux. –