在基於 Qt 的網絡通信項目中,使用 QTcpServer 監聽連接,收到請求時創建 QTcpSocket 處理數據交互,核心任務是解析對端發送的 XML 數據。團隊內部出現兩種封裝設計:
QTcpSocket,派生出自定義套接字類,將 XML 解析邏輯封裝在派生類中。QTcpSocket 作為成員變量,在該類中處理 XML 解析。readyRead)。QTcpSocket 耦合度高,若基類接口變更或需替換網絡庫,修改成本大;違反「合成復用原則」。優先採用組合模式。將 QTcpSocket 作為私有成員,通過信號槽連接 readyRead 等信號到自定義槽函數,在槽中讀取數據並委託給 XML 解析器。這樣既保持了職責單一,又降低了對 Qt 網絡模塊的強依賴。
class XmlMessageHandler : public QObject {
Q_OBJECT
public:
explicit XmlMessageHandler(QTcpSocket* socket, QObject* parent = nullptr);
private slots:
void onReadyRead();
void onSocketError(QAbstractSocket::SocketError);
private:
QTcpSocket* m_socket;
// XML 解析相關...
};