公纵号: 皮豪

博客: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框架的加持下,开发飞速。

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

T02 ExtractSubject 项目开发总结的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  2. HTML+CSS项目开发总结

    好几天没更新博客了,刚实战完一个HTML+CSS的简单项目.经过几天的摸索,发现收益良多.之前只是单纯得写demo,看知识点,没有亲自实战项目.但实战过后才会了解,如何才能更好地提升自己的技术.针对这 ...

  3. 简历生成平台项目开发-STEP2问卷调查结果统计分析

    根据之前设计的调查问卷,截止目前为止,一共收到64份问卷结果.一共16题,分别从基本信息.是否对简历制作有需要.对产品期望的特点和建议采纳四个方面设计问题.下面逐题分析问卷结果: 1.您的性别 可以看 ...

  4. 如何使用Worktile进行敏捷项目开发管理

    Worktile在任务管理上采用了看板视图,非常适合进行敏捷项目开发管理.事实上,在开发Worktile的过程中,我们也是自产自销,使用Worktile管理Worktile本身的开发过程,在本文中跟大 ...

  5. Java进击C#——项目开发环境

    本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...

  6. 关于举办 2015年 Autodesk 助力云应用项目开发活动通知

    各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...

  7. .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

    Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C# ...

  8. [转]基于Starling移动项目开发准备工作

    最近自己趁业余时间做的flash小游戏已经开发得差不多了,准备再完善下ui及数值后,投放到国外flash游戏站.期间也萌生想法,想把游戏拓展到手机平台.这两天尝试了下,除去要接入ane接口的工作,小游 ...

  9. 用户识别APP项目开发计划书

    用户识别APP项目开发计划书        项目介绍: 用户识别APP,通过在有限时间内引导用户A交互,提取用户的行为特征,然后将APP交给用户X(可能是A也可能是陌生人),在1分钟内引导X交互,判断 ...

  10. 企业项目开发--分布式缓存Redis

    第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis ...

随机推荐

  1. Paddle Graph Learning (PGL)图学习之图游走类模型[系列四]

    Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...

  2. [CS61A] Lecture 1&2&3. Introduction&Functions&Control

    [CS61A] Lecture 1&2&3. Introduction&Functions&Control 前言 CS61A是加州大学伯克利分校一门计算机专业课程,用于 ...

  3. Hashcat使用指南

    Hashcat使用指南 免责声明: 0×01 Hashcat破解linux shadow的密码-首先了解shadow文件到底是什么? 0×02 hashcat的使用 参数补充: -m 参数 -a 参数 ...

  4. 并发bug之源(二)-有序性

    什么是有序性? 简单来说,假设你写了下面的程序: int a = 1; int b = 2; System.out.println(a); System.out.println(b); 但经过编译器/ ...

  5. 大前端html基础学习01

    根目录 相对路径:针对图片数量比较多的情况,新建一个文件夹,将所有图片放进去,imgs/cat.webp (1)/:下一级 (2)a/b/c/cat.webp 返回路径(向外找):从下一级html中找 ...

  6. CheckBox 选中取值以及回填

    html: <td align="left" style="word-wrap:break-word;word-break:break-all;" col ...

  7. jquery 简单分页插件jQuerypage

    昨天项目手机端要用到table的分页,考虑到手机端界面小,系统数据不多,在没考虑大批量数据处理的前提前就下载了这个插件,简单. 展示数据datas为json格式. <!DOCTYPE html& ...

  8. 社论 22.10.9 优化连续段dp

    CF840C 给定一个序列 \(a\),长度为 \(n\).试求有多少 \(1\) 到 \(n\) 的排列 \(p_i\),满足对于任意的 \(2\le i\le n\) 有 \(a_{p_{i-1} ...

  9. 【重难点总结】DMA与kafka零拷贝机制之间的关系

    一.DMA介绍 1.概念 DMA(Direct Memory Access,直接存储器访问) 是一种内存访问技术,独立于CPU, 直接读.写系统存储器.外设等 主存与I/0设备之间使用DMA控制器控制 ...

  10. vba 正则表达式用法

    Sub Regexp_test(Sht As String, str As String)On Error Resume NextDim regx As ObjectDim arr, brr, mhS ...