Disons que j'ai un objet générique, Personne. Une personne a un nom et un nom de genre doit être une chaîne, et le genre doit être male
ou female
. J'ai aussi un objet de collection, PersonList, qui a un tableau d'objets Person et permet des opérations sur l'ensemble (par exemple, retourner une liste de personnes d'un certain sexe.)Instancier des objets de collection
D'une part, ce serait bien pour créer le PersonList avec les données dans le constructeur ...
list = new PersonList([new Person('Alice', 'Female'), ...]);
... mais nous ne savons pas si les données sont valides. Nous pouvons permettre à des objets personne invalide et vérifier leur validité lorsque nous les accès, ou nous pouvons donner une méthode personne vaild() et dire ...
list = new PersonList();
alice = new Person('Alice', 'Female');
if (alice->valid()) list->add(alice);
... ou peut-être nous vérifions valide() dans ajouter(). Mais il me semble étrange d'avoir une méthode valide() du tout.
En général, comment instancieriez-vous ces objets? Est-ce une chose subjective, ou existe-t-il une «bonne voie» universelle?
D'accord, cela a du sens. Cela signifie-t-il que nous ne devrions jamais autoriser des objets invalides dans notre liste (plutôt que de les autoriser, mais de les marquer comme non valides et de les corriger plus tard)? Et si notre constructeur de liste reçoit une personne invalide, comment indiquons-nous que notre liste n'a pas été créée comme prévu? Cela ressemble à un argument pour ne pas avoir un constructeur, et à la place, l'utilisateur ajoute() chaque personne individuellement. ... ou est-ce si spécifique que la réponse est "ça dépend"? – ajp5103
Si vous suivez les directives que j'ai énoncées ci-dessus, il ne devrait jamais y avoir d'objets Personne invalides, car toute possibilité de créer un est accompagnée d'une vérification pour s'assurer que cela ne s'est pas produit. S'il n'y a aucune personne invalide, votre liste ne doit jamais s'inquiéter de la possibilité. Vous pouvez avoir un constructeur pour votre PersonList si vous le souhaitez. Tout objet Person invalide sera intercepté avant que le constructeur de PersonList ne les voit. –
Donc, vous dites de lancer une exception dès que la personne est jugée invalide? – ajp5103