Ao pensar no desenvolvimento ágil de software e em todos os princípios (SRP, OCP, ...), pergunto-me como tratar o log.
O registro ao lado de uma implementação é uma violação do SRP?
Eu diria yes
porque a implementação também deve ser capaz de executar sem o log. Então, como posso implementar o log de uma maneira melhor? Eu verifiquei alguns padrões e cheguei à conclusão de que a melhor maneira de não violar os princípios de uma maneira definida pelo usuário, mas usar qualquer padrão conhecido por violar um princípio é usar um padrão decorador.
Digamos que temos um monte de componentes completamente sem violação do SRP e, em seguida, queremos adicionar o log.
- componente A
- componente B usa A
Queremos registrar para A, então criamos outro componente D decorado com A, ambos implementando uma interface I.
- interface I
- componente L (componente de log do sistema)
- componente A implementa I
- o componente D implementa I, decora / usa A, usa L para registrar
- componente B usa um I
Vantagens: - Posso usar A sem registrar - testando A significa que não preciso de zombarias - os testes são mais simples
Desvantagem: - mais componentes e mais testes
Sei que essa parece ser outra questão de discussão aberta, mas na verdade quero saber se alguém usa melhores estratégias de log do que um decorador ou uma violação do SRP. E o registrador singleton estático, que é o NullLogger padrão e, se o log de syslog for desejado, altere o objeto de implementação no tempo de execução?