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 ...
随机推荐
- VMware ESXi 8.0 SLIC 2.6 & macOS Unlocker (Oct 2022 GA)
ESXi 8.0.0 GA (General Availability) 请访问原文 VMware ESXi 8.0 SLIC 2.6 & macOS Unlocker (Oct 2022 G ...
- Java 中九种 Map 的遍历方式,你一般用的是哪种呢?
日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种. 通过 entrySet 来遍历 1.通过 ...
- win 10玩魔兽争霸/黑边,不能全屏,闪退
1.win键+s键搜索注册表 打开 找到路径 计算机\HKEY_CURRENT_USER\SOFTWARE\Blizzard Entertainment\Warcraft III\Video 这里有两 ...
- easyui combobox的级联设置
<body> <input id="title" class="easyUI-combobox" //onSelect:在该combobox被 ...
- day10 集合——队列(Queue)、Vector & Map集合常用方法 & HashMap的实现原理&二叉树&二叉查找树AVL树&红黑树
集合--List 栈先进后出 队列 先进先出 Queue队列 方法 Queue<Integer> q = new LinkedList<>(); //添加元素 q.add(2) ...
- Dart语言简介
简单介绍Dart语言 Dart是一种针对客户优化的语言,亦可在任何平台上快速开发的应用陈旭. 目标是为多平台开发提供最高效的变成语言,并为应用程序框架搭配了领会的运行时执行平台. Dart特点 Dar ...
- 【大数据面试】【框架】Flume:Source的断点续传、重复数据、Channel选择
〇.用途 流式结构 获取磁盘日志,拦截器过滤后,传递指定数据,写入HDFS或kafka 一.组成-Source.Channel.Sink 事务(put/take) 1.Source---taildir ...
- 【RocketMQ】主从同步实现原理
主从同步的实现逻辑主要在HAService中,在DefaultMessageStore的构造函数中,对HAService进行了实例化,并在start方法中,启动了HAService: public c ...
- 《HTTP权威指南》– 8.网关、Web机器人
集成点:网关.隧道及中继 网关 网关(gateway): 资源和应用程序之间的粘合剂.应用程序可以(通过HTTP或其它已定义的接口)请求网关来处理某条请求,网关可以提供一条响应.网关可以向数据库发送查 ...
- python语法之注释
引言 注释的最大作用是提高程序的可读性,在开发过程中非常有必要加上注释.Python 支持两种类型的注释,分别是单行注释和多行注释. 1 单行注释 Python 使用井号#作为单行注释的符号,语法格式 ...