我有一个可由SocketContext
facade访问的套接字通信子系统,它是类库中唯一的公共类。 SocketContext
允许您连接到远程端点,发送和接收消息。
问题如下:假设SocketContext
消费者希望监视已发送的消息队列(发送过程是异步的)。
好吧,我们需要在int QueueSize {get;}
中添加SocketContext
属性,但接下来会发生什么,我们将找到谁知道队列大小,它是DataSocket
类SocketContext
1}}不知道,所以要将该属性拉到SocketContext
我必须多次包装它,如下所示:
// DataSocket -> Connection -> SocketClient -> SocketContext
internal class DataSocket
{
public int QueueSize { get{ /* calculating and returning actual value */ }}
}
internal class Connection
{
IDataSocket _dataSocket;
int QueueSize { get{ return _dataSocket.QueueSize; }}
}
internal class SocketClient
{
IConnection _connection;
int QueueSize { get{ return _connection.QueueSize; }}
}
public class SocketContext
{
ISocketClient _client;
int QueueSize { get{ return _client.QueueSize; }}
}
我做错了什么?
答案 0 :(得分:0)
SocketContext
facade,类库中唯一的公共类。
我想说这可能是最初的问题之一。如果只有一个公共组件,那么它就很难公开功能。这也失败了单一责任,开放/封闭设计和界面隔离等概念。你基本上有一个对象在做所有事情。
可能只有SocketContextFacade
这样的单一访问点,但这就是您输入API的方式,然后可以公开客户端可以与之交互的其他对象/组件。
我使用的第三方库通常有2个方面。
配置在启动时发生一次。它告诉图书馆如何满足您的特定需求。整个系统使用运行时,根据配置行事。以下是一些例子: