Language agnostic 设计问题:客户端是否应该同时创建会话和套接字?

Language agnostic 设计问题:客户端是否应该同时创建会话和套接字?,language-agnostic,law-of-demeter,Language Agnostic,Law Of Demeter,我有三门课: 客户 一场 插座 会话和套接字都依赖于客户端来创建这两个对象。 会话依赖于套接字,没有会话就不会创建套接字。 客户机是否应该具有公开创建会话和私下创建套接字的功能? 这不是违反了德米特的法律吗? 编辑: 当前代码: class Client { private: // Connection details public: shared_ptr<Socket> createSocket(); // returns a new socket if the conne

我有三门课:

客户 一场 插座 会话和套接字都依赖于客户端来创建这两个对象。 会话依赖于套接字,没有会话就不会创建套接字。 客户机是否应该具有公开创建会话和私下创建套接字的功能? 这不是违反了德米特的法律吗? 编辑: 当前代码:

class Client
{
private:
  // Connection details
public:
  shared_ptr<Socket> createSocket(); // returns a new socket if the connection is opened
}

class Session
{
public:
  Session(Client &); // Accepts a client and gets a socket for i/o to the server
}
现在有消息告诉我,会话不应该负责从客户端获取套接字,客户端应该创建会话。
我说得对吗?

这要看情况而定。关于客户机,您要告诉我们的是,它同时创建会话和套接字,仅此而已


如果客户机需要同时使用这两种方法,则不存在冲突。如果它只是为了向会话提供套接字而创建套接字,我认为这是一种违规行为,会话应该获取套接字本身。

客户端包含连接到服务器的内部对象。建立连接后,当前我有一个返回新套接字的函数。会话对象接受一个客户机,并在ctor中调用为该会话创建新套接字的函数。这应该改变吗?如果是,如何创建?同样,如果客户端不使用套接字,那么套接字创建可能应该移动到会话。但是创建套接字所需的所有数据都在客户端上,因为连接到服务器的内部结构也用于创建套接字。这是我的网络库中提供的。我不能取消客户端类,因为它跟踪会话。@the_drow-也许您需要将共享信息提取到它自己的类中?@Oded:Code已添加。请复习这个问题。