关于个人项目的一些分析和思考
一.代码解读
代码用java编写,分为四个类,分别用来管理登录及登陆用户信息(Register),保存所有在库用户的信息(Database),计算并生成题目(calculateProduce),整体调控运行实现需求功能(Main)。

Register与Database类功能如上所述,calculateProduce类代码量较大,包含有中缀表达式的生成,中缀与后缀表达式的转换,后缀表达式的计算,以及生成算式的重复性检验。而Main类中存在整个项目唯一一个main函数,也是程序运行的唯一入口,在经过简单的初始化后进入双重永真循环,外层循环用于每次题目的生成,而内层循环则是生成一次题目的执行步骤。
二.优点分析
1.代码风格偏向于管道-过滤器风格与面向对象风格的异构组合,因此使得整个系统的输入和输出特性简单,通过main函数简单的语句实现过滤器之间的连接(管道),并且也可以在代码中看到功能模块的复用。这样的实现有利于增强代码的可维护性和可拓展性,对于整体功能调试也有一定帮助。而面向对象的功能实现使得代码的运行步骤与人类习惯的思维方式较一致,并且稳定且同样易于修改和扩充。
2.代码中局部变量和函数的名字含义清晰(以下图DataBase类中名字为例),使代码阅读者不需要过多的注释便可以了解各个变量和函数的具体作用(以下图函数头的描述为例,在阅读代码前使读者清楚ChangeType函数的功能)。并且代码中除函数描述之外并没有太多的注释,代码即文档,用最简单的注释解释清楚代码的含义才是最好的表述。

3.撰写有需求分析与用户手册的文档,需求分析文档详尽的分析了用户的需求并针对需要做出了一定程度的思考,但是在需求获取,需求分析和需求文档编写的方式上手法还有欠缺;而用户手册则比较详细的以流程图和功能演示的方式向用户展示了代码的运行流程和运行中的操作细节,使得对程序不熟悉的用户也可以参考用户手册简单的运行程序实现功能(见下图)。

三.缺点分析
1.正是由于偏向于管道-过滤器风格,使得程序运行时与用户的交互性较弱,每个阶段用户能够控制的功能极为有限。而面向对象实现的代码最大的不足在于编程阶段如果一个对象需要调用另一个对象,他就必须知道那个对象的标识,如果被调用对象的标识发生改变,可能需要花费一定时间寻找并更新其标识,而在代码运行阶段也需要将一个对象的实例传入另一个对象实例的方法,才可以满足两者之间的关联或依赖关系,而传递一个对象实例作为参数无疑增加了程序运行时间和运行出错的可能。
2.代码的注释简洁,这也产生了一定的问题,对于没有注释的代码块并没有文档说明这些代码的含义,可能需要阅读者去理解代码的运行逻辑和实际意义,如果产生误解,就会对整体功能的理解存在一定的偏差(如下图为生成算式的核心函数,注释并不多)。

3.与用户的交互考虑并不全面,对于部分非法输入(回车等)依旧可以接收(如下图输入用户名和密码前输入大量回车,仍会接收),虽然代码检测了绝大部分的非法检测,而对于目前测试的可以输入的非法输入而言,也不会影响代码的正常运行,但是这样部分非法输入的接收也会影响到用户的体验,似乎与客户的要求也不太符合。

4.对于重复代码的封装虽然做出了一定的成果,但是对于部分代码块还是存在重复出现的情况,部分函数过于臃肿使得阅读困难,建议之后在编写函数的过程中尽量将代码量较多的函数拆分为多个小函数进行结合实现功能。

浙公网安备 33010602011771号