every step

图书管理系统-项目总结

November 19, 2020 • ☕️ 3 min read

概述

第一次一个人来做的系统,之前所作的大都是和别人合作。这次经历暴漏出来很多问题,记录一下。

一个不成熟的 demo 。作为数据库结课作业,花了一个星期做出来的,里面存在很一些可见的 BUG ,由于目前有很多作业,不打算继续改 bug 了,先放在这里!

问题

  • 数据结构:HashMap ,ArrayList
  • 版本控制问题。
  • 数据库表修改。
  • 前端理解。

数据结构

ArrayList

最开始采用的是数组来模拟数据库将数据渲染到前端,我参考的视频中采用的是 HashMap 实现的,当时我没有太多思考,后来发现很有必要。

当我采用 JDBC 连接数据库后采用了 ArrayList 来将数据库中的数据存储到内存中后发现所有数据都变成了最后一条数据的记录。

例如:原始数组中存储的数据是 [1,2,3,4] 但是渲染到前端后数据就变成了 [4,4,4,4] 。

经过排查,我发现每次循环重新 new 对象可以解决这个问题,但是依旧不理解是什么原因导致的。

经过搜索发现 ArrayList 存储的是引用!如果不重新 new 对象,只有一个全局对象,而地址是不变的,也就是每次向 ArrayList 中所存的引用是相同的。

那么 ArrayList 中存的所有引用都指向了同一块内存地址,而这块内存地址中存储的值在最后一次被刷新。这也就证明了为什么是最后一条数据重复的原因了。

HashMap

之后我又发现了一个问题,每次刷新页面会导致页面的数据变多,且多出来的数据都是重复的数据。然后再次去排查问题定位问题。

经过排查发现采用 ArrayList 来存储从数据库加载到内存中的数据是不可取的,因为 ArrayList 可以存重复数据。 当存完数据后跳转到展示信息的页面时会重新触发查询的函数(因为要展示新存的数据),而重新查询出来的所有数据都会再次存进去,重复数据是这样来的。

不仅仅是存储功能会涉及这个问题,更新删除也会涉及。所以要对 ArrayList 数组进行去重。我选择的是采用 HashMap 来替代 ArrayList ,键就是对应的索引,值就是查询出来的一条对象,我认为这样效率会更高且更省内存。

版本控制

我很后悔没有直接采用 Git 来控制版本,而是走一步看一步,当我修改的地方过多导致调试时 Bug 变多以至于不知道从哪里改起,甚至想推倒重写。

虽然经常使用 Git ,对常见的几个命令比较熟悉。但也应该摸索一下 Idea 的 Git 功能,搞清楚哪些文件该跟踪哪些文件不该更新。

数据库

数据库建表建库语句应当采用源代码的形式来保存,要少用图形界面,因为执行源码一步就搞定了,但是点击图形界面需要很多步骤,记忆一些东西,步骤也存在冗余。

我没有过多的考虑表结构导致后续开发过程中复杂度增加,以至于回头改表,一堆代码随之也要修改!而修改表结构的操作最好用代码来保存,我看到同学没有用代码来保存而是在图形界面上点很多次,感觉效率很低,有很多不得不点的重复操作。

前端

前端采用的是 Bootstrap 这个框架,这个框架很友好,上手就能用!当然也存在缺点,改 Html 页面太麻烦了!

没有采用 Vue 的主要原因是时间不够了,其次是 JS 基础不扎实,没有一个清晰的脉络。

前端存在的问题是,Bootstrap 一些语法没有查到,没有达到灵活运用的程序。路由跳转理解一部分,这一块也和后端有关。

后端

Spring Boot 的标签理解不深刻。