Come progettare una classe con più moduli

5

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?

    
posta Joe 07.03.2016 - 03:08
fonte

1 risposta

5

Avere un riferimento all'intero App è un segno di design scadente (è come avere un contesto globale che rompe totalmente l'incapsulamento).

Foster iniezione di dipendenza e in particolare l'iniezione del costruttore se è necessario utilizzare una dipendenza in più di 1 metodo.

Possibile implementazione di Module A :

Module A
public:
    Module A(B& b, C& c) //ctor
    method()
    method(int i)
    method(bool b, D& d) //d could also be injected in the constructor

private:
    B& b
    C& c
    
risposta data 07.03.2016 - 07:58
fonte

Leggi altre domande sui tag