【问题标题】:Design question: Should the client both create the session and the socket?设计问题:客户端是否应该同时创建会话和套接字?
【发布时间】:2010-05-14 06:16:14
【问题描述】:

我有三个班级:

  • 客户
  • 会话
  • 套接字

Session 和 Socket 都依赖于客户端来创建这两个对象。
会话依赖于套接字,没有会话就不会创建套接字。 客户端是否应该有一个函数可以公开创建 Session 并私下创建 Socket?
不违反得墨忒耳定律吗?
编辑: 当前代码:

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
}

现在有些事情告诉我,会话不应该负责从客户端获取套接字,而客户端应该创建会话。
我说的对吗?

【问题讨论】:

    标签: language-agnostic law-of-demeter


    【解决方案1】:

    这取决于。关于Client,您告诉我们的只是它同时创建了SessionSocket,仅此而已。

    如果Client 需要同时使用两者,则不存在违规。如果它只创建Socket 以便将其提供给Session,我会说这 违规,Session 应该得到Socket 本身。

    【讨论】:

    • 客户端包含连接到服务器的内部对象。建立连接后,目前我有一个返回新套接字的函数。会话对象接受一个客户端,并在 ctor 中调用为该会话创建新套接字的函数。那应该改变吗?如果有,怎么做?
    • 同样,如果Client 不使用套接字,则套接字创建可能应该移动到Session
    • 但是创建套接字所需的所有数据都在客户端上,因为连接到服务器的内部结构也用于创建套接字(这是我的网络库中给出的)。我无法关闭客户端类,因为它会跟踪会话。
    • @the_drow - 也许您需要将共享信息提取到自己的类中?
    • @Oded:添加了代码。请检查问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多