将命令模式适配为进行多个API连接的单例
本文关键字:API 连接 单例 模式 命令 | 更新日期: 2023-09-27 17:58:34
一个队友为服务编写了一个连接器,该连接器实例化了API连接,并在整个代码中使用相同的连接。事实证明,这些连接器的创建方式实际上是单体的。因此,一旦需要多个连接,我们就会遇到很多麻烦。我正要重写连接器,但另一位队友说这是一个使用Command模式的好地方。
不幸的是,我在网上能找到的唯一例子是那些有问题的命令与撤销事物或菜单有关的例子。在这种情况下,像Invoker、Receiver、Command等映射到什么样的功能?
Pattern Term My domain
Invoker -> Connection instance
Receiver -> ?
Command(s) -> GetSomeData(userInfo, creds, constraints), GetSomeOtherData(userInfo, creds, constraints), ...
User -> Connector singleton?
Invoker -> Also Connector singleton?
我打算将API Connection对象移动到它自己的类中,而不是连接器单例上的属性,然后new
使用适当的信任向上移动Connection对象,并将其传递给每个GetSomeData方法。我是不是觉得命令模式的东西有点过头了?
对于这个有点脱节的问题,很抱歉,它可以归结为:什么命令模式概念映射到我当前关注的问题中,这样做有什么好处?
在我看来,你的队友似乎误解了什么。
除了创建一个"任务/数据"队列来发送抛出的连接之外,使用命令模式并不能真正帮助您。在这种情况下,撤消是没有用的,但您实际上可以用Memento模式序列化/保存每个命令,并创建发送的每个引发连接的命令的日志。
我认为,如果您的服务器能够维持并发调用,那么您的合作伙伴就没有注意到多个连接将是并发的。
所以,要么是您的合作伙伴遗漏了什么,要么是服务器不处理并发。在您的情况下,命令模式将仅用于创建日志,并与失败/成功的的memento存储/恢复命令一起使用