Ho qualcosa di simile
Class App
    Module A
    Module B
    Module C
    Module D
Ciascuno dei moduli ha una sola responsabilità e è ben incapsulato (interfaccia pubblica, implementazione privata).
Il problema è che questi moduli devono fare riferimento l'un l'altro molto. (Non c'è un modo ragionevole intorno a questo, penso.) Ciò ha portato a un sacco di passaggi di parametri ingombranti.
Module A
    method(B& b)
    method(int i, C& c)
    method(bool b, D& d, B& b, C& c)
 Che cosa succede se inserisco qualcosa come   App& app    all'interno di   A   ? (E poi inizializza   app    appropriatamente.) In questo modo posso solo fare questo: 
Module A
public:
    method()
    method(int i)
    method(bool b)
private:
    App& app
Sembra più leggibile, sembra abbastanza logico. Sì, è meno prevedibile quali moduli modifichino quali, ma sembra giustificato. O sono solo pigro? Qual è il modo corretto di affrontare questo tipo di problema?