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

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

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

总体设计

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

详细设计:

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

面向接口重构代码

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

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

sqlite3的实现

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

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

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

添加

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

查询一些数据

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

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

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

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

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

测试状态机主要代码

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

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

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

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

添加restful api接口实现

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

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

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

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

添加

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

查询一些

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

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

服务器端代码

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

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

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

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

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

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

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

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

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

返回所有数据

返回一些数据

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

添加数据

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

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

demo

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

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

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

题外话

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

你可能感兴趣的:(node.js,c++)