2015-10-13 20 views
5

Diciamo che ho uno classA, che ha i propri metodi con i propri campi privati ​​e che cosa avete (basicamente aderiscono agli standard di incapsulamento). Quindi ho classB, che ha bisogno per la sua esecuzione dello stato finale (che è ottenuto attraverso uno dei metodi di classA, che rompe un po 'l'incapsulamento) dello classA. E poi abbiamo classC, che ha ancora bisogno dello stato finale di classB. E così via e così via, per dire a classM. E 'considerato un accoppiamento troppo alto o no?Accoppiamento troppo alto o ok per progettare in questo modo?

Modifica: Ok, diciamo che stavo progettando il sistema di bottino, che dipende se la caduta avviene in base al nemico sconfitto (ogni nemico ha diverse possibilità di caduta). Se il nemico viene sconfitto, la classe che maneggia la battaglia rotola un dado, se cade qualcosa o no, e poi ho bisogno di propagare quello stato nell'altra classe che gestisce la distribuzione del bottino. In caso di interruzione, il loot di gestione classi esegue la generazione e la distribuzione di bottino al giocatore, in caso contrario, void.

L'esecuzione finale sarebbe qualcosa di simile:

classA a = new classA; 
... //classA does its stuff 
classB b = new classB(a.getFinalState()); 
... // again class does its stuff based on outcome of A 
classC c = new classC(b.getFinalState()); 

E così via.

+0

Non capisco il problema qui? Perché non passare semplicemente l'oggetto a al costruttore dell'oggetto b? Può interrogarlo con mezzi normali per determinare lo stato senza interrompere l'incapsulamento. Se sei preoccupato di esporre troppo, magari provare a utilizzare i getter privati ​​del pacchetto o isolare le interfacce nei propri moduli? Stai facendo delle buone domande, ma stai pensando troppo. ;-) – jgitter

risposta

1

Edit: si può ottenere quello che vuoi seguendo un Delegation Pattern e la sua stretta fratello Decorator Pattern

Builder modello, come già suggerito, è una valida alternativa. Dipende sempre da ciò che il tuo progetto originale vuole.

+0

Il mio male, in realtà ho modificato il mio post originale per includere il mio problema attuale nella questione –

2

Sì. C'è un forte accoppiamento con il livello 2. Questo è altamente evitabile e considerato una cattiva pratica che riduce la flessibilità e la riusabilità del codice. E il test è una cavalla notturna.

Se hanno proprietà correlate, considerare Builder Pattern.

Builder modello è quello di trovare una soluzione al costruttore telescopico anti-modello

Che costruttore anti-modello è quello che hai finora.