gpt4 book ai didi

reactjs - 两个不同的 "strategies"的设计模式,它们没有实现相同的接口(interface)

转载 作者:行者123 更新时间:2023-12-03 14:25:12 25 4
gpt4 key购买 nike

我用 ReactJS 和 SocketIO 构建了一些程序,它作为与 socketIO 服务器通信的完全可定制的工具。

您可以注册要监听的事件、发送任何类型的消息、将配置对象传递给连接等。

现在我决定添加对 native Websocket 的支持。问题是, native Web 套接字更简单,并且不实现与 SocketIO 相同的功能。

例如,我的 React 容器中有这个方法(其中集中了我所有的主要逻辑,没有 Redux):

registerEventToSocket = (instanceId, socket, eventName) => {
socket.off(eventName);

socket.on(eventName, (...args) => {
const lastArg = args[args.length - 1];
const isFunction = this.isFunction(lastArg);

if (isFunction) {
lastArg();//If a callback was supplied from the server, it is invoked.
var index = args.indexOf(lastArg);
if (index > -1) {
args.splice(index, 1);
}

}

this.addMessageToState(instanceId, eventName, args, false)
})
}

当用户“添加事件”来监听时,会调用此方法。对于 native Websocket,只有一个事件需要监听,即“onmessage”事件,因此整个功能是无关紧要的。

该应用程序做了一些对于 native 套接字来说毫无用处的事情,例如“监听所有传入事件”的选项。

我正在尝试想出一些好的设计模式,我可以用它来创建一些多态性,以处理 SocketIO 情况和 native 情况。

我熟悉“策略模式”,我经常使用它,但就我而言,两种“策略”都会实现两个不同的接口(interface),这会违反 SOLID 原则。

有什么建议吗?

最佳答案

这是典型程序的有机演变。我认为您现在的主要问题是决定您的基准驱动程序将支持哪些功能。就目前情况而言,客户端与实现 (SocketIO) 的耦合度太高。您需要为所有 WebSocket 驱动程序定义一个接口(interface)并调整其实现。

策略模式在这里不适用,这是一种行为模式。这是一个结构性问题。您可以根据您的要求使用适配器或桥接器。

enter image description here

关于reactjs - 两个不同的 "strategies"的设计模式,它们没有实现相同的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com