Tengo una clase de adaptador ( ChatSdkAdapter ) para Sdk de chat externo. Chat SDK no está disponible como un paquete de NPM y, por lo tanto, se carga mediante inyección en el documento a través de una etiqueta de secuencia de comandos. Una vez cargado e inicializado, se puede acceder desde el objeto de la ventana: window.ChatSdk.login()...
La clase ChatSdkAdapter contiene métodos como login, sendMessage..., que dependen de la disponibilidad de la API window.ChatSdk.
¿Qué método se prefiere para resolver el acoplamiento entre el adaptador y el SDK?
Método 1: exponga el método getInstance en el adaptador, que siempre devolvería la misma instancia del adaptador, pero antes de eso, verifique si window.ChatSdk está disponible (y si no, devolverá un error). Sin embargo, ¿qué sucede si se elimina (descarga) window.ChatSdk después de crear la instancia?
Método 2: agregue una verificación si ChatSdk está disponible en todos los métodos del adaptador (EnsureChatSdkAvailable()), como primera línea
¿Cuál de estos se prefiere, y hay un mejor enfoque?
Gracias de antemano.
Ambas cosas. Use el getInstance() seguro en sus métodos de clase para llamar a window.ChatSDK y recuperarlo. De esta manera, cada método que use el SDK de chat generará un error correcto si el SDK no está allí en cualquier momento.
# pseudocode Class ChatAdapter { private chat: ChatSDK private function initChat(): void { # what ever you need to do to initialize your chat sdk # or error if you cant this.chat = window.ChatSDK } private function getChatInstance(): ChatSDK { if (this.chat ==== undefined) { this.initChat() } return this.chat } public function doSomething (): void { this.getChatInstance().doSomething() } }Esencialmente, lo que está haciendo es el patrón singleton donde tiene una instancia única que se mantiene en la memoria para que todas las instancias de su adaptador llamen. Además, notará que puse una función de inicio porque creo que es preferible inicializar cuando primero "necesita" el sdk de chat, pero si por alguna razón no puede controlar el inicio, entonces puede fallar.