公纵号: 皮豪

博客:www.kbug.cn

邮箱:pphboy@qq.com

前言

看来已经是一种习惯,每次寒假都会开发一个项目出来。本次项目使用的是Qt GUI,语言是C++。不得不说,在业务上写C++和Java区别还是非常大,但我的技术水平非常低,不懂处理指针,所以很大程度上,用的代码也不能体现一个成熟的软件工程。

此次使用QT GUI 开发,第一是为了方便,因为不需要安装其他依赖,直接打开就可以使用。第二是为了易用,因为使用WEB,则需要搭建环境什么的,在使用上,其实不算简单,不利于普通用户使用。(显然我知道怎么让普通用户用的舒服)

其实这个软件就是个普通的业务型的软件,不是技术型的,这个软件的作用第一是帮我练习题目,第二是帮我务实时间,第三是锻炼我的软件工程实践水平,第四是刻意练习。

技术层面

使用的技术是Qt,协议是GPL 3.0,语言是C++。

这里我用的了Java方面的处理代码的方案,就是把软件分层。每一层做什么事。类似于MVC, Model(pojo数据类), View (窗口),Controller(绑在View上的那些函数)。在技术架构上,我没有去寻找参考,而是自己摸索的。下次开发的时候会选用更成熟的架构方案。

因为C++有指针这个方便的工具,但指针用不好,就会经常出问题。我开发时也经常引用空指针,我的项目里有很多野指针。所以我把一些常用窗口的指针都以静态成员变量的方式存储在一个工具类中。我需要用的时候,我直接引用一下就行。显然使用C++,在指针管理上还是非常方便。多数会被重复使用的变量,就会被我一次性初始化,然后取地址存到指针里。后面会一直用这个对象,而且在不同的条件下,仅仅只改变对象的数据。

因为架构分层,所以一开始我就设计了一个不太聪明的工具类,用来做DAO层的query对象提供。整体软件使用的是都是一个query,这样的话,缺点就是不能异步。只能同步。其实有些思路,例如做一个Query池,直接生成十个Query对象放在那里,用的时候直接拿,像任务队列一样,排队的使用。这样就不会出问题。这是线程池的思考,放在这里,虽然我不需要多线程查询,但我需要多个查询窗口。

其实代码难度倒不高,重点就是在基础架构上花了很多时间,一开始没有理清楚怎么存这些指针,后面直接采用了我写Java的工具类的方式。在Java之中是不需要考虑什么对象的回收什么的,因为Java吃内存太多,也没有什么人在意内存。而C++,如果你不会回收,那么这个软件就会一直越来越大。所以有必要以组件的形式来使用,而不是每一次使用的时候创建一个组件,而是每一次使用的时候只更新组件的数据就行。

组件的初始化占用的内存是不可少的,但不会存在太多大量占用内存的情况。这样对业务的抽象更为方便,管理和维护起来都非常方便。

为什么写得慢

这个软件架构和模块组件的设计,决定着后面开发软件是否顺利。我们制作题目类和答案类的时候,没有想到,题目和答案类可以使用同一个类,并且在查询的时候我也没有用什么ORM。这样我的灵活性非常高的。所以后面的功能写的非常快就是因为架构和组件都成型了。

如果可以,先要爬到巨人肩膀上,再能站到巨人肩膀上。

总结

第一,我对软件工程的实践水平非常低,其实还是源于项目写的太少。为什么写的少?因为我想做一些更有技术水平的,比如做服务器,做协议开发。显然世界可不是这么动作的,我至少需要做一些基础软件来提升自己的水平,不然开口就是我要造核弹改变世界了。

哪日我熟练Cpp,Rust,我不是想写什么软件就写什么软件吗?人人都想做高级软件,但这些低级的业务型软件也需要人来做。

技术上,如果这个项目用WEB技术来做,基本上两天左右应该就可以完成。而且在ORM框架的加持下,开发飞速。

如果都爬不到巨人的肩膀上,我怎么站得住。用别的人技术就相当于是用直升飞机把你放到自由女神像上面,你以为自己站在巨人上面,其实不过是短暂的自由罢了。当然,这是对于我学习阶段来说的。

最新文章

  1. html页面读取PDF小案例
  2. JavaWeb前端:CSS
  3. mac 10.9开启有道词典取词功能
  4. 监控SQL Server的job执行情况
  5. android开发之手势识别
  6. REST总结
  7. NOTE07152246 JAVA 发展及JDK配置
  8. Android Studio的使用(十二)怎样打包项目
  9. Visual Studio for Mac 初体验
  10. 树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题
  11. 修改了my.ini没有效果,MySql的字符集还是没有变成utf8——mysql中文乱码
  12. [译]使用explain API摆脱ElasticSearch集群RED苦恼(转)
  13. 20165312 2017-2018-2《Java程序设计》第9周学习总结
  14. JavaScript 排序算法
  15. numpy和pandas和matplotlib用法
  16. jQuery链式调用
  17. 16bit C & ASM 如何混合编译?
  18. go语言之进阶篇指针类型和普通类型的方法集
  19. 竞赛题解 - NOIP2018 赛道修建
  20. Git无法删除文件问题:fatal: pathspec 'readme.txt' did not match any files

热门文章

  1. Java自定义排序
  2. .NET二叉树,递归和迭代遍历二叉树
  3. Go语言核心36讲29
  4. .NET 7 的 AOT 到底能不能扛反编译?
  5. 数据结构初阶--顺序表(讲解+C++类模板实现)
  6. IDEA项目下out与target目录的区别详解
  7. 在链表上实现 Partition 以及荷兰国旗问题
  8. chrome设置socket5代理
  9. Windows 服务器中使用 mysqldump 命令导出数据,解决中文乱码问题
  10. 通过启动脚本控制PHP-FPM开关