1. 项目概述与架构设计
在构建一个完整的C++集群聊天服务器时,数据持久化是核心功能之一。本篇文章将深入讲解如何设计一个高效、解耦的Model数据层框架,实现用户注册功能从网络层到数据库的完整闭环。
当前系统采用分层架构设计,各层职责明确:
- 网络层:基于Muduo库实现高性能网络通信
- 业务控制层:处理具体业务逻辑(登录/注册)
- 模型操作层:封装数据库CRUD操作
- 实体层:承载业务数据
- 数据库连接层:封装底层MySQL操作
这种分层设计的关键优势在于:
- 各层职责单一,修改互不影响
- 网络层完全不知道数据库存在
- 业务层通过统一接口访问数据
- 数据库变更只需调整底层实现
2. 数据库连接层实现细节
2.1 MySQL封装类设计
db.h中定义的MySQL类是对MySQL C API的面向对象封装,主要提供以下核心功能:
cpp复制class MySQL {
public:
MySQL(); // 初始化连接
~MySQL(); // 释放资源
bool connect(); // 连接数据库
bool update(string sql); // 执行更新操作
MYSQL_RES* query(string sql); // 执行查询操作
MYSQL* getConnection(); // 获取原始连接
private:
MYSQL* _conn; // MySQL连接指针
};
设计考量:
- 资源管理:采用RAII模式,构造函数初始化
mysql_init,析构函数自动关闭连接 - 错误处理:所有操作失败时记录日志,便于问题排查
- 字符集处理:连接后立即设置
set names gbk避免中文乱码
2.2 连接配置实现
db.cpp中实现了具体的数据库连接逻辑:
cpp复制static string server = "127.0.0.1";
static string user = "root";
static string password = "123456";
static string dbnam
