Question d'architecture : déléguer des responsabilités
Salut,
Ca fait quelque jour que je suis confronté à un problème de conception en C++.
Voici une simplification du problème.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
class A {
void afficher() {
for (auto it = tab.begin(); it != tab.end(); ++it)
it->get()->afficher();
}
vector< shared_ptr<B> > tab;
};
class B {
virtual void afficher() = 0;
};
class C : public B {
virtual void afficher() { ... }
...
};
class D : public B {
virtual void afficher() { ... }
...
}; |
On a donc une classe A qui contient des objets héritant de la class B.
Imaginons maintenant que la méthode afficher soit complexe. Pour réduire les responsabilités de chaque classe, il serait alors naturelle de retirer cette tache de ces classes.
Seulement voilà, je n'arrive pas à faire ça proprement : je me retrouve à utiliser des dynamic_cast
Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void afficher( A &a )
{
for (auto it = a.getTab().begin(); it != a.getTab().end(); ++it)
{
C* c;
D* d;
if( (c = dynamic_cast<C>( it->get() )) != NULL )
{
...
} else if( (d = dynamic_cast<D>( it->get() )) != NULL )
{
...
}
}
} |
PS : La même problématique peut ce poser pour les attributs des classes.
Que pensez vous de ce problème ?
Avez vous des idées ?
Merci pour votre aide,
Ekinoks