T02 ExtractSubject 项目开发总结
公纵号: 皮豪
博客: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 项目开发总结的更多相关文章
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- HTML+CSS项目开发总结
好几天没更新博客了,刚实战完一个HTML+CSS的简单项目.经过几天的摸索,发现收益良多.之前只是单纯得写demo,看知识点,没有亲自实战项目.但实战过后才会了解,如何才能更好地提升自己的技术.针对这 ...
- 简历生成平台项目开发-STEP2问卷调查结果统计分析
根据之前设计的调查问卷,截止目前为止,一共收到64份问卷结果.一共16题,分别从基本信息.是否对简历制作有需要.对产品期望的特点和建议采纳四个方面设计问题.下面逐题分析问卷结果: 1.您的性别 可以看 ...
- 如何使用Worktile进行敏捷项目开发管理
Worktile在任务管理上采用了看板视图,非常适合进行敏捷项目开发管理.事实上,在开发Worktile的过程中,我们也是自产自销,使用Worktile管理Worktile本身的开发过程,在本文中跟大 ...
- Java进击C#——项目开发环境
本章简言 上一章我们了解一下开发环境,知道了什么去新建一个项目工程.却并没有去项目工程进行介绍.可是之后我们会常常跟项目工程打交道.所以这章笔者就对项程工程的常用的一些功能进行讲解.当然说全面那是不可 ...
- 关于举办 2015年 Autodesk 助力云应用项目开发活动通知
各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...
- .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)
Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C# ...
- [转]基于Starling移动项目开发准备工作
最近自己趁业余时间做的flash小游戏已经开发得差不多了,准备再完善下ui及数值后,投放到国外flash游戏站.期间也萌生想法,想把游戏拓展到手机平台.这两天尝试了下,除去要接入ane接口的工作,小游 ...
- 用户识别APP项目开发计划书
用户识别APP项目开发计划书 项目介绍: 用户识别APP,通过在有限时间内引导用户A交互,提取用户的行为特征,然后将APP交给用户X(可能是A也可能是陌生人),在1分钟内引导X交互,判断 ...
- 企业项目开发--分布式缓存Redis
第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis ...
随机推荐
- 使用@Transactional注解的方法所在的类获取不到注解的解决方案
前段时间遇到一个问题,一个service叫做A吧,有多个实现类分别是B,C,D,需要根据前端传的不同参数去匹配不同的实现类,我就自定义了一个注解@OrderDeal放在B,C,D上面,然后匹配前端传的 ...
- day15-Servlet04
Servlet04 12.ServletConfig 12.1ServletConfig基本介绍 ServletConfig类是为Servlet程序配置信息的类 Servlet对象和ServletCo ...
- Pwn学习随笔
Pwn题做题流程 使用checksec检查ELF文件保护开启的状态 IDApro逆向分析程序漏洞(逻辑复杂的可以使用动态调试) 编写python的exp脚本进行攻击 (若攻击不成功)进行GDB动态调试 ...
- vue引用MarkDown(mavonEditor)编辑器,文档
mavonEditor Install mavon-editor (安装) npm install mavon-editor --save 如何引入: 全局引用: // 全局注册 import Vue ...
- 【大数据面试】sqoop:空值、数据一致性、列式存储导出、数据量、数据倾斜
一.有没有遇到过问题,怎么进行解决的 1.空值问题 本质:hive底层存储空数据使用\n<==>MySQL存储空数据使用null 解决:双向导入均分别使用两个参数☆,之前讲过 2.数据一致 ...
- 基于opencv实现简单人脸检测
作用:在视频中自动检测出人脸 使用内容:灰度转换,分类器,矩形框选,圆形框选,摄像头读取及释放 代码逻辑: 先读取摄像头后, 对摄像头拍摄到的图片进行逐帧分析, 并对图像进行灰度转换后使用类选择器识别 ...
- java调用python脚本 并传参(根据配置文件获取python文件地址)
方式一: Java代码 package com.mybatis.plus.utils; import cn.hutool.core.lang.Console; import java.io.Buffe ...
- 【Java】从头开始学新的编程语言
本文自用,Java入门笔记 -每个类都要在自己的单独文件中-我大为震撼 能运行的最小的Java程序要有main函数 public static void main(String[] args) (id ...
- JAVA学到方法写了一个四则运算计算器,请教一下有什么需要改进的
package method; /* * 四则运算计算器 * */ import java.util.Scanner; public class Demo07 { public static void ...
- Graph Neural Network——图神经网络
本文是跟着李沐老师的论文精度系列进行GNN的学习的,详细链接请见:零基础多图详解图神经网络(GNN/GCN)[论文精读] 该论文的标题为<A Gentle Introduction to Gra ...