Pregunta

En C++, no existe una herramienta de registro estándar de facto.En mi experiencia, las tiendas hacen lo suyo.Sin embargo, esto crea un pequeño problema al intentar crear componentes de software reutilizables.Si todo en su sistema depende del componente de registro, esto hace que el software sea menos reutilizable, lo que básicamente obliga a cualquier proyecto posterior a tomar su marco de registro junto con los componentes que realmente desean.

IOC (inyección de dependencia) realmente no ayuda con el problema ya que sus componentes tendrían que depender de una abstracción de registro.Los propios componentes de registro pueden agregar dependencias en la E/S de archivos, mecanismos de activación y otras dependencias posiblemente no deseadas.

¿Agregar una dependencia a su marco de registro propietario sacrifica la reutilización del componente?

¿Fue útil?

Solución

Sí.Pero la inyección de dependencia ayudará en este caso.

Puede crear una clase base de registro abstracta y crear implementaciones para los marcos de registro que desea utilizar.Sus componentes solo dependen de la clase base abstracta.Y inyecta las implementaciones junto con todas sus dependencias según sea necesario.

Otros consejos

Sí, Mendelt tiene razón.Hacemos exactamente esto en nuestros productos.Todo depende de la interfaz abstracta de ILogger, pero no depende de nada más.Normalmente, un ejecutable o una DLL de alto nivel será el que construya una interfaz Logger implementada real y la inyecte.

Si está buscando crear bibliotecas que no se volverán a compilar, pero desea proporcionar una interfaz de registro, entonces quizás una buena manera sea permitir que el usuario (de la biblioteca) proporcione una devolución de llamada.

Al inicializar el registro con su biblioteca, deberán especificar la devolución de llamada y luego el código adhesivo dependerá de ellos para que funcione bien con lo que tengan.

Si puede hacer que la firma de la devolución de llamada parezca una función estándar que siempre tendrán disponible, les proporcionará una opción predeterminada sencilla si en realidad no tienen un registrador.

Además, es posible que la persona que llama haya creado instancias de componentes de la biblioteca varias veces y, en caso de contención de recursos o problemas de subprocesos, desee proporcionar una devolución de llamada de registrador diferente para cada uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top