【问题标题】:Properties and onchange events. Need to find a proper design pattern属性和 onchange 事件。需要找到合适的设计模式
【发布时间】:2013-01-29 15:38:24
【问题描述】:

于是我做了一个socket通信库。其中一部分是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 提供有关连接状态的信息,并且能够触发Connected/Disconnected 事件,因为它拥有Socket。毫无疑问。

现在,IConnection 的用户也想知道它何时通过身份验证。例如,服务器可能会监听该事件,并且一旦连接通过身份验证 - 发送客户端的初始配置数据。或者客户端可能会监听该事件并决定开始通信或重试身份验证过程。

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

所以,为了让IConnection 能够更改其状态并通知订阅者有关身份验证过程,我必须实现这两种方法

void OnAuthenticated();
void OnAuthenticationFailed();

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

我觉得我在这里做错了什么。因为我一个人工作,任何想法都将不胜感激。

【问题讨论】:

    标签: c# architecture


    【解决方案1】:

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

    所以现在IConnection 自己进行身份验证处理,因为它知道核心协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2021-11-06
      • 2020-05-14
      • 2020-02-20
      相关资源
      最近更新 更多