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
ConsoleLoggeraFileSysteme tutto funziona bene. - Passo
FileLoggeraFileSysteme 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.