属性和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();
它们显然是从协议层身份验证过程代码中调用的。
我觉得我在这里做错了什么。由于我独自一人工作,任何想法都将不胜感激。
我最终将协议的核心部分(如身份验证、保活服务和最有可能在任何地方使用的基本消息类型)转移到了Communication程序集。
所以现在IConnection
在知道核心协议的情况下自己进行身份验证处理。