Files
--hp-socket-TCP--ssl--/Client-Native/README_REFACTOR.md
2026-01-23 08:39:07 +08:00

5.4 KiB
Raw Permalink Blame History

Client-Native (重构版) - 现代化项目结构

项目说明

这是 Client-Native 项目的重构版本,采用现代 C++ 项目管理标准,将原本 462 行的单一 main.cpp 文件重构为模块化的多文件结构。

项目结构

Client-Native/
├── main.cpp                      # 主程序入口122行
├── pch.h / pch.cpp               # 预编译头文件
├── CertificateConfig.h/.cpp      # 证书配置模块
├── CertificateManager.h/.cpp     # 证书管理模块
├── SSLClientConnection.h/.cpp    # SSL客户端连接模块
├── main.cpp.backup               # 原始文件备份
└── README_REFACTOR.md            # 本文件

模块说明

1. CertificateConfig - 证书配置

  • 职责: 存储和提供SSL证书数据
  • 文件: CertificateConfig.h, CertificateConfig.cpp
  • 特点:
    • 静态方法访问证书数据
    • 包含客户端证书、私钥、CA证书和密码
    • 单一职责:证书数据管理

2. CertificateManager - 证书管理器

  • 职责: 加载和解析证书
  • 文件: CertificateManager.h, CertificateManager.cpp
  • 功能:
    • 从内存加载 X509 证书
    • 从内存加载加密私钥
    • 打印 OpenSSL 错误信息
  • 特点: 无状态工具类,可复用

3. SSLClientConnection - SSL客户端连接

  • 职责: 封装完整的SSL客户端通信逻辑
  • 文件: SSLClientConnection.h, SSLClientConnection.cpp
  • 功能:
    • 初始化 SSL 环境
    • 建立到服务器的 SSL 连接
    • 发送和接收加密数据
    • 资源管理RAII模式
  • 特点:
    • 使用构造函数/析构函数管理资源
    • 禁用拷贝构造和赋值操作
    • 提供清晰的公共接口

4. main.cpp - 应用程序入口

  • 职责: 用户交互和流程控制
  • 行数: 从 462 行减少到 122 行
  • 功能:
    • 控制台初始化
    • 创建和管理 SSLClientConnection 对象
    • 用户命令处理
    • 主事件循环

改进之处

🎯 单一职责原则SRP

  • 每个类只负责一个功能领域
  • 易于理解和维护

🔒 封装性

  • 私有成员和公共接口清晰分离
  • 隐藏实现细节

♻️ 资源管理RAII

  • SSLClientConnection 自动管理 SSL 资源
  • 析构函数确保资源正确释放
  • 无需手动调用 Cleanup

📦 模块化

  • 代码按功能分组到不同文件
  • 便于单元测试
  • 易于复用(例如 CertificateManager 可用于其他项目)

🚫 消除全局变量

  • 原版使用全局 g_ssl_ctx, g_ssl, g_socket
  • 重构版所有状态封装在对象内部

📋 命名规范

  • 类名使用 PascalCase
  • 函数名使用 PascalCase
  • 私有成员使用 m_ 前缀

对比统计

指标 原版 重构版 改进
main.cpp 行数 462 122 -73.6%
源文件数量 1 4 +300%
全局变量 3 0 -100%
类数量 0 3 +3
代码复用性 ⬆️
可测试性 ⬆️

编译和运行

项目仍然使用相同的编译配置:

  • Visual Studio 2022
  • 平台工具集: v143
  • OpenSSL 14x (x64/x86)
  • 静态链接运行时库 (MTd/MT)

编译步骤

  1. 打开 TestEcho-SSL-Console.sln
  2. 选择 Client-Native 项目
  3. 选择配置Debug/Release和平台x64/x86
  4. 点击 "生成"

运行

运行方式与原版完全相同:

.\Client-Native.exe

依赖关系

main.cpp
  ├─> SSLClientConnection
  │     ├─> CertificateManager
  │     └─> CertificateConfig
  └─> CertificateConfig

功能保持一致

重构版本保持与原版完全相同的功能:

  • SSL_VM_PEER 双向认证
  • 使用内存中的证书(无需文件)
  • 连接到 127.0.0.1:5555
  • 发送 "hello" 消息
  • 接收并显示服务器响应
  • UTF-8 中文支持
  • 非阻塞数据接收
  • 交互式命令菜单

未来扩展方向

这种模块化结构便于以下扩展:

  1. 配置文件支持: 将 CertificateConfig 改为从文件读取
  2. 日志系统: 添加 Logger 类统一管理输出
  3. 异步 IO: 使用 std::async 或线程池处理网络 IO
  4. 异常处理: 使用异常代替返回值错误处理
  5. 智能指针: 使用 std::unique_ptr 管理 SSL 对象
  6. 配置类: 抽象服务器地址、端口为配置对象

学习要点

对比学习建议

  1. 原始版本 (main.cpp.backup): 了解底层 OpenSSL + Winsock API
  2. 重构版本: 学习现代 C++ 项目组织和设计模式

设计模式

  • RAII (Resource Acquisition Is Initialization): SSLClientConnection
  • Static Factory: CertificateConfig 静态方法
  • Manager Pattern: CertificateManager

C++ 最佳实践

  • 禁用不需要的特殊成员函数(拷贝构造/赋值)
  • 使用 const 限定常量方法
  • 头文件保护(#pragma once
  • 命名空间管理(namespace SSLClient

总结

这次重构展示了如何将"一个文件实现所有功能"的代码转变为遵循现代 C++ 最佳实践的模块化项目。虽然行数增加了(因为增加了头文件和模块边界),但代码的可读性、可维护性、可测试性都得到了显著提升。

对于学习者来说,两个版本都有价值:

  • 原版: 快速理解完整流程
  • 重构版: 学习工程化实践

重构日期: 2025 原始项目: TestEcho-SSL-Console/Client-Native