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

利用C++开发一个迷你的英文单词录入和测试小程序-升级版本

我们现在有了一个本地sqlite3的迷你英文单词小测试工具,需求就跟工作当中一样是不断变更的。这里虚构两个场景,并且一步一步的完成最终升级后的小demo。

场景:数据不依赖本地sqlite3,需要支持远程访问,用目前的restful api来实现

总体设计

这里我们需要做一个迷你的restful的服务端,并且优化本地的代码,从以前请求本地sqlite3,变成restful 请求,并且还能支持原先本地sqlite3。需要代码尽可能的容忍需求的变化。

详细设计:

为了能适应本地sqlite3和restful api访问,我们需要来一次简单的抽象,把业务层的接口给抽象出来,这样利用派生类来构建sqlite3的实现和restful api 的实现,然后重构下状态机,面向接口编程。这样就能还好的应对这里的需求,即使后续迁移到mysql,es等等都不在话下。

面向接口重构代码

先抽象接口,我们主要有几个业务查询函数,查询所有数据,查询some数据,添加数据,以及更新数据

sqlite3的实现

为了复用代码之前的sqlite3作为一个成员,构造的时候打开数据库

添加

查询一些数据

有了这两个类,我们搞个factory来构建这样的对象出来。然后再之前的状态机里面全部利用接口来操作。

原先直接调用manager的代码编程操作接口

测试状态机主要代码

然后再构造函数里面构造正确的对象

到这里我们有个面向接口的重构版本

添加restful api接口实现

继承一个新的派生类,很显然这里是调用restapi,来完成对应的功能。这里我们还是继续使用cpprestsdk来完成。

我们先定义三个辅助函数,更新类似这里不再重复。

添加

查询一些

备注:按正常的开发顺序,其实应该先整服务器端,然后再编码c++ client部分。

服务器端代码

这里可选择路子很多,python,java spinrtboot,node等等,这里挑选从来没玩过的nodejs来整。毕竟就是为了了解点新的知识。

node 开发一个restful 百度下,一般是推荐express来整。直接参考demo来搞

引入express 和validator,验证数据,以及实现restful功能

在开始写之前,我们先要把sqlite3远端的node代码写出来,老样子,定义一个模块

连接数据库,执行sql语句,然后导出函数

在app.js里面,引入。然后就是写接口对应的几个实现代码

返回所有数据

返回一些数据

添加数据

到这里服务器基本完成,建议服务器单独用postman 配合nodejs 来整,不要直接和c++对接,不然问题会发散,烧脑。到这里服务端和客户端都有了。在工厂函数里面构造对应的对象,就自动适应了需求变化,可能这也就是写代码前需要先思考,设计的魅力所在。

demo

题外话

关于字符编码,字符编码可能花费了我写这个小工具很多时间,一会是string转wstring,一会是utf-8转gb2312(为了显示)。总结下来,1,需要知道当前的string 是什么编码,然后目标是什么编码,然后找对应的函数;2. vs 这里因为区域设置,使用的GB2312,所以utf8需要转换成GB2312才能正确的显示中文。3. web是不是都是utf8?

http://www.lryc.cn/news/184045.html

相关文章:

  • 用c动态数组(实现权重矩阵可视化)实现手撸神经网络230902
  • Android.mk和Android.bp
  • CSS 常用样式-文本属性
  • BootstrapBlazor企业级组件库:前端开发的革新之路
  • 力扣 -- 1745. 分割回文串 IV
  • C# 给某个方法设定执行超时时间
  • 安装NodeJS并使用yarn下载前端依赖
  • (Java高级教程)第三章Java网络编程-第八节:博客系统搭建(前后端分离)
  • 901. 股票价格跨度
  • JavaScript中的模块化编程,包括CommonJS和ES6模块的区别。
  • 从零开始 Spring Cloud 13:分布式事务
  • 2023Node.js零基础教程(小白友好型),nodejs新手到高手,(二)NodeJS入门——buffer模块、计算机基础、fs模块、path模块
  • lua如何调用C/C++
  • 简单聊一聊公平锁和非公平锁,parallel并行流
  • 【SpringCloud】微服务技术栈入门4 - RabbitMQ初探
  • cefsharp(117.2.20)cef117.2.2最新体验版
  • layui在上传图片在前端处理图片压缩
  • js 事件参考
  • 卷积网络的发展历史-LeNet
  • (2023,GPT-4V,LLM,LMM,功能和应用)大型多模态模型的黎明:GPT-4V(ision) 的初步探索
  • 【C++设计模式之装饰模式:结构型】分析及示例
  • 绘制散点图、曲线图、折线图和环形图失败, 设置迭代次数和进度无法保存图片
  • micro-ROS中对消息的内存管理
  • Springboot中使用拦截器、过滤器、监听器
  • 代码随想录二刷day45
  • 泊车功能专题介绍 ———— AVP系统基础数据交互内容
  • 蓝桥杯每日一题2023.10.6
  • 7、【Qlib】【主要组件】Data Layer:数据框架与使用
  • Kubernetes安装部署 1
  • 在VS Code中优雅地编辑csv文件