Pergunta

Em C++, não existe uma ferramenta de registro padrão de fato.Na minha experiência, as lojas criam as suas próprias.No entanto, isso cria um certo problema ao tentar criar componentes de software reutilizáveis.Se tudo em seu sistema depende do componente de log, isso torna o software menos reutilizável, basicamente forçando qualquer projeto downstream a levar sua estrutura de log junto com os componentes que eles realmente desejam.

IOC (injeção de dependência) realmente não ajuda com o problema, pois seus componentes precisariam depender de uma abstração de registro.Os próprios componentes de log podem adicionar dependências na E/S de arquivos, mecanismos de acionamento e outras dependências possivelmente indesejadas.

Adicionar uma dependência à sua estrutura de log proprietária sacrifica a capacidade de reutilização do componente?

Foi útil?

Solução

Sim.Mas a injeção de dependência ajudará neste caso.

Você pode criar uma classe base de registro abstrata e criar implementações para as estruturas de registro que deseja usar.Seus componentes dependem apenas da classe base abstrata.E você injeta as implementações junto com todas as suas dependências conforme necessário.

Outras dicas

Sim, Mendelt está certo.Fazemos exatamente isso em nossos produtos.Tudo depende da interface abstrata do ILogger, mas não depende de mais nada.Normalmente, um executável ou uma DLL de alto nível será aquele que construirá uma interface Logger realmente implementada e a injetará.

Se você deseja construir bibliotecas que não serão recompiladas, mas deseja fornecer uma interface de registro, talvez uma boa maneira seja permitir que o usuário (da biblioteca) forneça um retorno de chamada.

Ao inicializar o log com sua biblioteca, eles precisariam especificar o retorno de chamada e, em seguida, o código-cola depende deles para que funcione bem com o que eles têm.

Se você puder fazer com que a assinatura do retorno de chamada pareça uma função padrão que eles sempre terão disponível, isso fornecerá uma opção padrão fácil se eles realmente não tiverem um registrador.

Além disso, o chamador pode ter instanciado componentes da biblioteca várias vezes e, para contenção de recursos ou problemas de threading, deseja fornecer um retorno de chamada do criador de logs diferente para cada um.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top