Dans quelques projets récents auxquels j'ai participé j'ai été presque accro au modèle de codage suivant: (je ne suis pas sûr s'il y a un nom propre pour cela, mais de toute façon ...) Disons qu'un objet est dans un état déterminé et que nous ne voulons pas changer cet état de l'extérieur. Ces changements pourraient signifier n'importe quel comportement, pourrait invoquer des algorithmes, mais le fait est qu'ils se concentrent sur le changement de l'état (état membre, état des données, etc ...) de certains objets.Question de conception de programme C++
Et appelons un moyen discret de changer cet objet un Mutator
. Mutators
sont appliquées une fois (généralement) et ils ont une méthode interne comme apply(Target& target, ...)
, ce qui provoque instantanément le changement de l'état de l'objet (en fait, ils sont une sorte d'objets fonctionnels).
Ils pourraient aussi être facilement assimilés à des chaînes et appliqués un par un (Mutator m1, m2, ...
); ils pourraient également dériver de certains BasicMutator
base avec la méthode virtual void apply(...)
.
J'ai introduit des classes appelées InnerMutator
et ExplicitMutator
qui diffèrent en termes d'accès - premier d'entre eux peut aussi changer l'état interne de l'objet et doit être déclarée comme un ami (friend InnerMutator::access;
).
Dans ces projets ma logique tournée travailler de la manière suivante:
- Préparer muteurs possibles, choisissez d'appliquer
- Créer et définissez le
object
à un état déterminé foreach (mutator) mutator.apply(object);
Maintenant la question.
Ce schéma turnes de bien travailler et (me) semble comme échantillon d'une certaine conception modèle non standard mais utile.
Ce qui me met mal à l'aise est que
InnerMutator
choses. Je ne pas pense que déclarer un mutateur un ami à chaque objet dont l'état pourrait être changé est une bonne idée et je ne veux pas trouver l'alternative appropriée.cette situation pourrait être résolu en termes de
Mutators
ou pourriez-vous conseils un peu de modèle alternatif avec le même résultat?
Merci.
Il pourrait être utile de déterminer si votre approche justifie ou non la façon un peu particulière de faire les choses si vous pouviez nous donner quelques exemples concrets. –