Ho una dipendenza ciclica nella mia architettura.
Supponiamo che ci siano i seguenti moduli:
FileSystem (utilizza Logger)
Gestisce le operazioni sui file come leggere, scrivere file, ecc. Questo modulo dovrebbe registrare le sue azioni. Il logger viene iniettato tramite l'integrazione delle dipendenze.
NullLogger (implements Logger)
Elimina tutti i messaggi di registro.
FileLogger (implements Logger)
Scrive i messaggi di log sul file system.
Dovrebbe utilizzare internamente il modulo FileSystem
per ridurre la duplicazione del codice. (Vedi dove va?)
ConsoleLogger (implements Logger)
Scrive i messaggi di log direttamente nella console.
Il problema (se non è chiaro ora):
- Passo
ConsoleLogger
aFileSystem
e tutto funziona bene. - Passo
FileLogger
aFileSystem
e poof! Non funzionerà perché questi due moduli dipendono ricorsivamente l'uno dall'altro, quindi non potrò istanziarne nessuno.
Posso solo pensare a un possibile modo per evitare il problema:
FileLogger crea un'istanza del proprio FileSystem con una NullLogger
(o qualsiasi altro Logger eccetto FileLogger
). Svantaggio: non sarei in grado di vedere alcun messaggio di registro (nel file) dal FileLogger stesso.
Ma non sono sicuro se questa sia la strada da seguire.