我有一個套接字通信子系統,SocketContext
門面,在類庫中唯一的公共類。 SocketContext
允許您連接到遠程終端,發送和接收消息。將物業拉到門面
問題如下:比如說SocketContext
消費者想監視發送的消息隊列(發送進程是異步的)。
好了,我們需要添加int QueueSize {get;}
財產SocketContext
,但接下來發生的事情是,我們要找到誰知道隊列的大小,這是一個DataSocket
類SocketContext
是不知道的,所以這個屬性拉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; }}
}
我在做什麼錯了?
嗯,我設計的時候在想EF,我的上下文意思就像'DbContext'。 典型的用法是:'var context = new SocketContext(ip,port);''context.Subscribe(messageId,messageHandler);''context.Send(message);'。 我不明白如何製作更多的公開課有助於:( – Anri
只是公開它不會幫助,但如果它是公開的,它可以暴露給客戶端,'SocketContext'可能暴露'DataSocket'或'Connection對象本身,而不是套接字或連接的屬性 –
事情是 - 類是在一個責任鏈中,只有相鄰的類彼此知道,如果我做'IDataSocket _dataSocket;''IConnection _connection;'和' ISocketClient _client;'public它可以讓消費者訪問像這樣的'context.Client.Connection.DataSocket.QueueSize'''這個很好,我猜 – Anri