Mon application contient plusieurs modules (grandes classes) comme le réseau io, le stockage de données, les contrôles, etc. Certains d'entre eux peuvent coopérer. Quel serait un bon moyen de déclarer et de lier les modules? Je vois plusieurs possibilités:Application C++: conception de modules
1) Tous les modules déclarés mondiale, nous avons donc dans main.cpp
#include ...
ModuleA a;
ModuleB b;
ModuleC c;
et si un veut parler au module c par exemple, nous aurons à a.cpp ce qui suit:
#include "c.hpp"
extern ModuleC c;
et ainsi de suite;
2) Tous les modules déclarés dans main(), ils sont donc locaux. Les liaisons sont réalisées dans les constructeurs:
int main() {
ModuleC c;
ModuleA a(c);
ModuleB b;
}
mais de cette manière, il est difficile de lier des objets qui veulent de l'autre (a (c), c (a))
3) Première phase: déclarer localement , deuxième phase: lier avec des pointeurs:
int main() {
ModuleA a;
ModuleB b;
ModuleC c;
a.Connect(&b);
b.Connect(&a);
c.Connect(&a, &b);
}
Y a-t-il un meilleur moyen? Je voudrais que ce soit dans le style cpp. La troisième façon de garder les pointeurs est un peu confuse (bien qu'il n'y aura pas de problèmes avec la validité des pointeurs bien que les modules vivent tout le temps, mais encore) et a une initialisation en deux phases, ce qui ne garantit pas que nous n'oublierons pas init un module, et oops - un pointeur invalide. La deuxième façon (comme je le pense) peut planter toute l'idée si certains objets auraient besoin de liaison croisée. La première voie semble naturelle (puisque les modules représentent l'application elle-même), mais n'est-ce pas un mauvais style? J'ai vu des projets où les modules ont été déclarés dans une classe d'univers et ils coopèrent via cet univers comme s'ils étaient tous globaux. Qu'est-ce que tu penses?
Merci.
En général, grande classe == mauvaise conception –