属性和onchange事件.需要找到一个合适的设计模式

本文关键字:一个 设计模式 事件 onchange 属性 | 更新日期: 2023-09-27 17:59:27

所以我制作了一个套接字通信库。其中一部分是IConnection

public enum ConnectionState
{
    NotConnected, Connecting, Connected, Authenticated, Disconnecting, Disconnected
}
public interface IConnection
{
    ConnectionState State { get; }
    event Action Connected;
    event Action Disconnected;
    event Action Authenticated;
    event Action AuthenticationFailed;
    // this two methods are the core of my question
    void OnAuthenticated();
    void OnAuthenticationFailed();
    bool Send(byte[] data);
    void Connect();
    void Close();
}

当然,IConnection提供关于连接状态的信息,并且能够在保持Socket时激发Connected/Disconnected事件。毫无疑问。

现在,IConnection的用户也希望知道它何时经过身份验证。例如,服务器可能会侦听该事件,并在连接经过身份验证后发送客户端的初始配置数据。或者客户端可能会侦听该事件并决定启动通信或重试身份验证过程。

但是。问题是,身份验证过程存在于协议层。CCD_ 6甚至不知道这种层的存在。协议层实际使用IConnection向对方发送序列化为byte[]的消息。

因此,为了使IConnection能够更改其状态并在身份验证过程中通知订阅者,我必须实现这两种方法

void OnAuthenticated();
void OnAuthenticationFailed();

它们显然是从协议层身份验证过程代码中调用的。

我觉得我在这里做错了什么。由于我独自一人工作,任何想法都将不胜感激。

属性和onchange事件.需要找到一个合适的设计模式

我最终将协议的核心部分(如身份验证、保活服务和最有可能在任何地方使用的基本消息类型)转移到了Communication程序集。

所以现在IConnection在知道核心协议的情况下自己进行身份验证处理。