【Qt】c++/Qt中易扩展的数据库访问方式(面向对象编程),类似java-hibenate的数据访问框架(未完成)

章节导航

1 怎么在数据库操作上体现面向对象

由于单位的项目没有很好的分工,除了Qt编程外,也需要掌握java和前端开发语言,了解java框架越多,便愈发察觉平日里进行的c++编程,为了尽快完成专门的功能,尽管也用到很多面向对象的特性,如多态,如继承,也有意识去封装各种类,但代码风格其实还是很受面向过程编程影响,距离用java的mvc编程时无意中便能遵循的面向对象的代码规范差距颇大。不否认我目前接触的C++成熟框架不够多,如有好的可以给我推荐一下。
按照目前我的经验,C/C++进行数据库读写,在没有代码积累的情况下,很难具备通用性以及可迁移性,有新的数据访问需求时,往往重写完整的数据库访问逻辑来获取数据进而用到业务处理逻辑中,对于多线程或连接稳定性等问题还要另外考虑。而java通过Hibernate对象关系映射框架(Map映射,用toBean方法转为pojo类),对于数据访问有挺好的支撑,故而目前我多是用java后台读写数据库数据并进行一些数据处理,通过数据传输给C端再进行显示相关的处理,尽量不在C直接访问数据库,这样的话还有C++端序列化反序列化的需求,又有各种各样的实现方式,如果可用Qt类的话可以用QDataStream等,这点在其他文章再做整理。
不过我现在希望借助Qt的能力访问数据库读写数据:一般博客上的介绍,就是怎么用Qt自带类判断库文件有效性、连接库、查询库中数据,把数据应用到业务处理或界面显示这么一个流程,很少会考虑到小组开发时代码分离,或针对复杂业务的代码设计;稍好一些,略微考虑到遵循DAO模式或多线程问题,会通过类进行一定的封装,但类函数的设计上仍是缺乏通用性。
例如这篇文章
QT数据库封装类-支持多线程
提供了支持多线程操作的针对单一特定数据结构的数据库读写类,但是没有抽象出数据操作工具,或者说完全的提供DAO层的编程示例,参考下面这篇文章
什么是dao模式,dao模式的实现方法
应该有这么一个数据库访问工具,基本具备使用hibenate时的能力,能够实现数据库连接关闭,判断数据库状态,记录日志,能够根据类型标识(如java中ClassA.class和一些params)实现不同的读写逻辑,根据数据库查询的字段类型和数据结构定义把读到的数据初步塞到类似JSONObject的结构中,进一步生成结果List<ClassA>。这样才能够将数据库的库操作、数据访问操作(不同库不同实现)、数据访问描述(通用代码)、以及数据的结构化(通用代码)分别进行编程,从而具备良好的拓展性和迁移性。
考虑创建CDataAccessUtil类,能通过配置描述文件获取数据库连接信息已经数据库类型,用对应的方式(如数据文件访问、基于驱动的odbc服务连接等)建立数据库连接;能通过数据库标志,如“db1”,访问标识,如“class1”,查询参数,如“type:process1;id:10086”,形成对应的sql查询语句获取数据;能通过“class1”提供的转换函数把结果输出为相应类型;能输出不同详细程度的日志信息。
简言之,java上怎么搞的,c++上我觉得应该也有这个轮子,就是不知道该用什么。

2 造轮子素材的一些参考

  1. QT数据库封装类-支持多线程
  2. Qt之自带的数据库QSQLITE(很具体的一个例子)
  3. hibenate by360
  4. 层次不同的数据类
  5. JSON和JAVA的POJO的相互转换工具类
  6. 如何在C++中实现一个类似SQL的容器: Boost-MultiIndex

3 现成的框架方案

DTL 和 SOCI 和 DAU (2012的帖子)
Struct Relational Mapping(SRM) 看帖子7楼

猜你喜欢

转载自blog.csdn.net/starfire_hit/article/details/126843651