es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Singleton con dependencia en TypeScript

Estoy construyendo una aplicación, donde estoy creando un registro como un singleton, el problema al que me enfrento es que necesito inicializar este singleton con datos provenientes del entorno (ENV) y solo puedo hacerlo en un lugar específico de mi código.

Tal vez en realidad no es un singleton ya que está devolviendo un tipo diferente.

¿Está bien usarlo de esta manera? Si no, ¿tienes alguna recomendación?

Gracias.

import CustomLogger from "./logger"
import ICustomLogger from "./Ilogger"
type LoggerConfig={level:string,format:'json'|'raw'}
class Logger{
    private static logger:ICustomLogger;
    private static config: LoggerConfig

<pre><code>public static init(config:LoggerConfig){
    this.config = config
}
public getInstance():ICustomLogger{
    if(!Logger.config){
        throw new Error('Config not defined')
    }
    if(!Logger.logger){
        Logger.logger = new CustomLogger(config)
    }
    return Logger.logger
}
</code></pre>

}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Está bien utilizar el patrón de diseño singleton de esta manera, incluso si requiere inicializar datos desde ENV en un lugar específico del código. El propósito de un singleton es garantizar que solo exista una instancia de un objeto y se pueda acceder globalmente, independientemente de dónde se inicialice.

    En cuanto a la pregunta de si esto es un verdadero singleton, es importante tener en cuenta que el código está devolviendo una instancia de ICustomLogger, que es la interfaz para la implementación real del registrador (CustomLogger). Por lo tanto, la instancia que se devuelve es del mismo tipo independientemente de dónde se acceda, lo que lo convierte en un verdadero singleton.

    En general, la implementación parece adecuada para el caso de uso descrito. Sin embargo, la implementación específica puede depender de los requisitos de la aplicación y la arquitectura general.

Comments are closed.