c++ - 什么样的 OOP 设计决策适合客户端/服务器应用程序中的协议(protocol)情况?

标签 c++ oop tcp

我正在用 C++ 编写客户端/服务器应用程序,需要实现简单的协议(protocol)才能正确发送和接收数据。我有一个服务器协议(protocol)类,它可以将消息转换为我的格式,然后再从这种格式转换。
什么是服务器端协议(protocol):

class BaseProtocol {
protected:
    int NumberOfBytesInPackOfText;
    std::string serviceString;
public:
    BaseProtocol(int SizeOfTextPack, const char* extraString): 
        NumberOfBytesInPackOfText(SizeOfTextPack), 
            serviceString(extraString) {}
    virtual std::string& convertToSystemMessage(const char* message)=0;
    virtual std::string& convertToNativeMessage(const char* message)=0;
    virtual ~BaseProtocol() {
        NumberOfBytesInPackOfText = 0;
        serviceString = "";
    }
};

class SimpleProtocol: public BaseProtocol {
public:
    SimpleProtocol(int SizeOfTextPack, const char* service): 
        BaseProtocol(SizeOfTextPack, service) {}
    std::string& convertToSystemMessage(const char* nativeMessage);
    std::string& convertToNativeMessage(const char* systemMessage);
};

现在我无法决定在客户端应用程序上实现该协议(protocol)的最佳决定。服务器协议(protocol)的友元类?或者我可能需要从服务器协议(protocol)中提取子类,然后客户端协议(protocol)将从此类派生?

最佳答案

我会创建一个独立于客户端和服务器的协议(protocol)类。他们每个人都可以调用该类的函数,而不是从该类继承。

这遵循favoring composition over inheritance的原则.此外,客户端和服务器都不是“协议(protocol)解释器”。相反,他们每个人都只需要使用该协议(protocol)。

关于c++ - 什么样的 OOP 设计决策适合客户端/服务器应用程序中的协议(protocol)情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484882/

相关文章:

c++ - 异常代码的解释需要

c++ - 数组地址

c# - 使用结构而不是给构造函数 8 个参数是否正确?

面向对象的Java : how subclass-object use method from superclass (that method has been Override)

c++ - 为什么我需要在模板继承中使用范围解析?

c++ - std::cout << cstring;打印 cstring 元素的值,而不是 cstring 十六进制地址。为什么?

c++ - 将引用参数分配给局部变量

url - 如何读取大型远程文件的部分(通过 tcpip?)

networking - netstat 捕获网络快照的速度有多快?

networking - TCP慢启动和拥塞避免问题?