Supponete di avere due oggetti uno di tipo A e l'altro di tipo B, dove A chiama un metodo di B e viceversa.
In pratica esiste una dipendenza circolare tra i due oggetti (il discorso si puo' ampliare facilmente ad n oggetti).
Proviamo a visualizzare tale interazione con un communication diagram (ne avevo già parlato in questo
post).
Come vedete dal disegno il refactoring risulta molto semplice da capire. In pratica creiamo un nuovo oggetto di tipo C che chiama
gli oggetti di tipo A e tipo B ed in questo modo abbiamo tolto la referenza circolare.
Non so se esiste già da qualche parte tale refactoring che battezzo: Remove circular dependency.