【问题标题】:Does the following pattern is good for dealing with client state on a server?以下模式是否适合处理服务器上的客户端状态?
【发布时间】:2021-09-08 18:11:05
【问题描述】:

我的服务器代码上的许多模块/服务/类都有以下模式:

class Sercice1PerClient
{
    void method1(int i)
    {
        printf("%s", StateOfTheClient);
    }
    void method2(int i)
    {
        printf("foo %s bar", StateOfTheClient);
    }
    char *StateOfTheClient;
}

class Service1
{
    void method1(int i, int clientID)
    {
        v[clientID].method1(i);
    }
    void method2(int i, int clientID)
    {
        v[clientID].method2(i);
    }
    std::vector<Sercice1PerClient> v
}

我面临的问题是每次我想更改method1我都必须这样做4次(2次在cpp中,2次在标题中)

有没有更好的方法来保持每个客户端的状态彼此分离,而不必重复“母类”中的所有功能?

这个模式有名字吗,你觉得合理吗?

【问题讨论】:

  • 我不相信有办法在不深入元编程领域的情况下解决这个问题(这绝对不能解决任何问题);即便如此,这也不应该是可能的。但是,您可以使用参数包和std::forward 将上面的代码模板化。这至少应该消除一些冗余,

标签: c++ design-patterns server


【解决方案1】:

首先,请不要使用char *。这是c++。使用string 或stringview。

接下来,一组客户信息如何,包括当前状态?我不知道这是否能解决您的问题,但将 status of c1 和 status of c2 保留为不同的变量似乎是重复的。

【讨论】:

  • 我只是使用 char * 来表示状态,但这可以是任何类型和任何数量的成员,具体取决于我实现的服务。我认为问题在于架构是在层中完成的,第 3 层需要第 1 层的功能,所以第 2 层需要转发功能......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多