首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能依赖于外部SDK的适配器类的设计模式

功能依赖于外部SDK的适配器类的设计模式
EN

Stack Overflow用户
提问于 2022-03-22 21:24:04
回答 1查看 70关注 0票数 0

我有一个用于外部聊天Sdk的适配器类(ChatSdkAdapter)。Chat SDK作为NPM包不可用,因此通过脚本标记使用注入加载到文档中。一旦加载并初始化了它,就可以从window对象访问它:window.ChatSdk.login().

ChatSdkAdapter类包含登录、sendMessage.等方法,所有都依赖于window.ChatSdk API的可用性

选择哪种方法来解决适配器和SDK之间的耦合?

方法1:在适配器中公开方法getInstance,它总是返回适配器的同一个实例,但在此之前,检查window.ChatSdk是否可用(如果没有,则返回一个错误)。但是,如果在创建实例之后删除(卸载) window.ChatSdk会发生什么?

方法2:添加一个检查ChatSdk是否在适配器的每个方法(EnsureChatSdkAvailable())中可用,作为第一行

其中哪一种更可取,是否有更好的方法?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-03-22 23:45:46

两者都有。使用类方法中的安全getInstance()调用window.ChatSDK并检索它。这样,使用chat的每一种方法都会在SDK不存在的情况下正确地出错。

代码语言:javascript
复制
# 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()
  }

}

本质上,您正在执行的是单例模式,其中有一个单独的实例化,该实例化被保存在内存中,用于调用适配器的所有实例。此外,您还会注意到,我放置了init函数,因为我认为,当您第一次“需要”chat sdk时,它更倾向于初始化,但是如果由于某些原因无法控制init,那么您可能会出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71579111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档