当前位置: 首页 > article >正文

数据中心类DataCenter(二)

数据中心类DataCenter(二)

前言

在上一集我们对数据中心类DataCenter做了以下内容,我们对他进行设置单例模式,我们讨论并写入了一些我们数据中心类需要管理的数据,重点介绍了我们验证码id的重要性,在最后我们还简单说明了我们为什么要使用数据中心类。

那么这一集我们就来简单写一下我们数据中心类的构造函数和析构函数,并讨论一下我们的后续数据需要持久化存储的相关事宜。

析构函数

我们可以直接复制代码粘贴即可。

DataCenter::~DataCenter()
{
    //释放所有的成员
    //针对nullptr的delete是合法行为,不必担心
    delete myself;
    delete friendList;
    delete chatSessionList;
    delete memberList;
    delete applyList;
    delete recentMessage;
    delete unreadMessageCount;
    delete searchUserResult;
    delete searchMessageResult;
}

这里我们是不需要去判断我们的成员是否为nullptr,在C++中,我们去delete一个nullptr的变量的行为是合法行为,我们并不需要去担心,当然可以去判断!

构造函数

DataCenter::DataCenter()
{
    /*
     * 这里hash仅仅只是new出实例,QList类型都暂时不实例化
     * 主要是为了nullptr表示非法状态
     * 对于hash来说,不关心整个是否为nullptr,而是某个key的value是否存在
     * 通过key是否存在也能表示该值是否有效
     */
    memberList = new QHash<QString, QList<UserInfo>>();
    recentMessage = new QHash<QString, QList<Message>>();
    unreadMessageCount = new QHash<QString, int>();

}

我们这里暂时不实例化我们的QList,nullptr是表示我们的非法状态。hash不关心是否为nullptr,关心的是里面的key和value。

数据持久化

说是数据持久化,其实也就是将一些属性写入文件当中,需要的时候就拿出来读写。

我们需要持久化的数据为loginSessionId和unreadMessageCount。

存储我们的登录会话id,主要目的就是我们后续实现的功能中,可能要去实现在客户端重启后,能够不必重新登录。

存储未读消息,一旦某个会话收到了消息,此处就会有未读消息的数据。当重启客户端的时候,我们的未读消息还依然存在。


那么我们就要讨论我们的这个文件要放在哪里?

那么作为我们windows的程序,我们就可以放在我们windows的系统目录当中AppData里面!

AppData

我们简单介绍一下AppData。

AppData是Windows系统中的一个隐藏文件夹,用于存储应用程序的配置、缓存和用户数据。它通常包含三个子文件夹:

  1. Local:存放应用程序的本地数据。
  2. Roaming:存放跨设备同步的数据。
  3. LocalLow:存放低权限访问的数据。

这个文件夹通常位于C:\Users\[用户名]\AppData路径下。


那么我们数据应该像什么样的形式进行存储?

我们选用JSON的模式进行存储!

JSON

我们也简单介绍一下JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但JSON是独立于语言的,这意味着它可以被多种编程语言读取和写入。

JSON的主要特点包括:

  1. 文本格式:JSON是一种纯文本格式,可以存储和表示结构化数据。
  2. 键值对:数据以键值对的形式存储,类似于字典或对象。
  3. 数据类型:支持多种数据类型,包括字符串、数字、数组、布尔值、null以及嵌套的对象。
  4. 易于解析:大多数编程语言都提供了解析和生成JSON的库。
  5. 广泛使用:在Web开发中广泛用于前后端数据交换,APIs和配置文件等。

那么我们已经规定好了数据持久化的相关事宜,那么下一集的内容就是把我们的数据持久化的内容给全部完成。那么我们下一集再见。


http://www.kler.cn/a/389734.html

相关文章:

  • 树形dp总结
  • 【专题】计算机网络之网络层
  • 冗余连接2 hard题 代随C#写法
  • 除了 Postman,还有什么好用的 API 调试工具吗
  • 【Linux】TCP原理
  • Java之泛型--对象指定多个泛型类型(有示例)
  • 【Linux 31】网络层协议 - IP
  • 【嵌入式设备】蓝牙鼠标使用教程——遥控器编码值
  • Netty篇(WebSocket)
  • VSCode + linux 远程免密登录
  • WSL 2 中 FastReport 与 FastCube 的设置方法与优化策略
  • Android 单元测试环境配置问题 Execution failed for task ‘:mergeDebugJavaResource‘.
  • J2EE平台
  • CompletableFuture:supplyAsync与runAsync
  • 【Spring】Spring框架中有有哪些常见的设计模式
  • macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试
  • 深入提升Python编程能力的全方位指南
  • mac 安装指定的node和npm版本
  • 中间件安全
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:数据加载策略如何决定分析速度(上)(15/30)
  • 机器学习(基础1)
  • 基于springboot+小程序的鲜花管理系统(鲜花1)
  • 小马识途营销顾问谈百科词条建立的注意事项
  • 网络安全:构建坚固的数字堡垒
  • 【C++ 算法进阶】算法提升十三
  • HCIP小型园区网拓扑实验