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 ...
随机推荐
- java学习之JSON
0X00前言 JSON可以说是javascript的一种数据类型,我们学习JSON是为了在客户端的数据给读取出来,官方的解释是:概述:JSON(JavaScript Object Notation, ...
- 基于python的数学建模---时间序列
JetRail高铁乘客量预测--7种时间序列方法 数据获取:获得2012-2014两年每小时乘客数量 import pandas as pd import numpy as np import mat ...
- C++初阶(封装+多态--整理的自认为很详细)
继承 概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单 ...
- Android网络请求(终) 网络请求框架Retrofit
Android网络请求(终) 网络请求框架Retrofit Retrofit底层是由OkHttp封装的,Retrofit对于注解的使用十分频繁,所以不了解注解的同学们可以去查查资料什么的. 这里有一个 ...
- WebApi实现Token验证
为什么要实现Token呢.在我们客户端发送请求时,如果没有校验数据是否合法那么就有可能造成非法请求泄露我们的数据 实现Token的思路 1.客户端通过用户名和密码来获取Token 通过自己的账号和密码 ...
- adb版本不同导致一个服务杀死另一个服务
前言 由于我用安装模拟器进行调试app,需要连接到固定端口, 而开发测试的时候用到eclipse中调用sdk中包含一个版本的adb, 另外Android killer中也包含一个版本的adb, 另外我 ...
- 下载安装MinGW-w64详细步骤
一.MinGW-w64介绍 MinGW 的全称是:Minimalist GNU on Windows ,实际上是将gcc(c/c++编译器)移植到了 Windows 平台下,并且包含了 Win32AP ...
- [.NET学习]EFCore学习之旅 -2 简单的增删改查
1.实例化创建数据库上下文类 首先实例化一个数据库操作上下文类,注意到DbContext实现了IDisposable接口,所以使用using语句,避免内存泄露. 2.插入 以Person类为例,先生成 ...
- 深刻理解JAVA并发中的有序性问题和解决之道
欢迎关注专栏[JAVA并发] 更多技术干活尽在个人公众号--JAVA旭阳 问题 Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码: int num = 0; boolean ready ...
- jupyter 数据显示设置
#设置显示行数pd.set_option('display.max_row',None)#设置显示列数pd.set_option('display.max_column',None)#设置显示宽度pd ...