Quando si pensa allo sviluppo del software agile ea tutti i principi (SRP, OCP, ...) mi chiedo come trattare la registrazione.
Il log è accanto a un'implementazione di una violazione SRP?
Direi yes
perché anche l'implementazione dovrebbe essere in grado di funzionare senza registrazione. Quindi, come posso implementare la registrazione in un modo migliore? Ho verificato alcuni schemi e sono giunto alla conclusione che il modo migliore per non violare i principi in un modo definito dall'utente, ma per utilizzare qualsiasi modello che è noto per violare un principio è quello di utilizzare un modello decoratore.
Diciamo che abbiamo un sacco di componenti completamente senza violazione SRP e quindi vogliamo aggiungere la registrazione.
- componente A
- il componente B utilizza A
Vogliamo logging per A, quindi creiamo un altro componente D decorato con A che implementa un'interfaccia I.
- interfaccia I
- componente L (componente di registrazione del sistema)
- componente A implementa I
- componente D implementa I, decora / utilizza A, usa L per la registrazione
- il componente B utilizza un I
Vantaggi: - Posso usare A senza registrazione - testare A significa che non ho bisogno di alcun mock di logging - i test sono più semplici
Svantaggi: - più componenti e più test
So che questa sembra essere un'altra domanda di discussione aperta, ma in realtà voglio sapere se qualcuno utilizza strategie di registrazione migliori di una violazione di decoratore o SRP. Che ne dici del logger statico di Singleton che è come NullLogger predefinito e se si desidera la registrazione di syslog, si modifica l'oggetto di implementazione in fase di runtime?