结对编程——项目代码分析

结对编程代码分析

  本文为结对编程前对对方项目代码进行学习和分析,此次队友为郭同学,通过学习其代码,进行分析如下,此文均为个人看法,不能作权威评判标准。

代码概述

  由此可见这是一个拆分详尽、可复用率高的代码结构,并且是一个典型的web结构,更方便复用于后期的web项目上,通过研读代码,大致分析如下

分析

├───src
│   └───main
│       └───java
│           │   StartMath.java // 程序入口
│           ├───controller //控制器
│           │       GenerateMath.java // 题目生成控制
│           │       UserExisted.java // 已存在的用户枚举
│           ├───entity // 实体
│           │       Paper.java // 试卷实体定义
│           │       Subject.java // 题目定义
│           │       User.java // 用户定义
│           ├───service // 服务提供
│           │   │   GenerateMathService.java // 试卷生成接口
│           │   └───impl // 接口实现
│           │           GenerateFactory.java //多态的工厂函数
│           │           HighGenerateImpl.java // 高中实现
│           │           JuniorGenerateImpl.java // 初中实现
│           │           PrimaryGenerateImpl.java // 小学实现
│           └───util // 静态工具
│                   GenerateUtil.java // 试题生成逻辑
│                   JudgeUserUtil.java // 用户权限判断
│                   OwnStorage.java // 重写储存逻辑
│                   UserBind.java // ExistedUser 与 User 转换绑定
....

  其中最引人注目的是service层的接口和实现、动态工厂的实现以及静态工具util的封装

image-20210928221535973

image-20210928221637729

优点

  通过细看和分析代码,优点大致如下:

  1. 代码有着良好的命名风格,对定义的功能和意义一目了然,有着良好的可阅读性
  2. 代码有着规范的Javadoc和缩进,可以实现轻松的导出Javadoc,对注释规范的掌握很好
  3. 对相同逻辑的提取和复杂逻辑的拆分做的很好,使代码的可复用性很强
  4. 使用了枚举、接口和类,且能使用高级的流操作+匿名函数进行操作,表明对Java基础的理解很到位
  5. 使用了抽象工厂方法,实现了动态多态的实现,表明对运行时多态和接口功能的充分了解
  6. 此项目是一个maven项目,且熟练使用了lombok依赖,表明对项目的熟悉程度很好,更易于后期对spring boot 的集成,体现高瞻远瞩

缺点

  此项目虽优点众多。代码优雅,但是仍存在缺点:

  1. 项目的生成逻辑相对单一,未能充分实现“随机生成”
  2. 项目的需求未能完全实现,缺少对已生成题目的判断
  3. 项目主函数的逻辑控制过于复杂,且变量众多,尽管使用语义命名,但在没有注释的情况下,还是丧失了一点对于代码的可读性

总结

  郭同学的项目,总的来说代码优雅,结构明确,逻辑拆分准确,使整个项目都有很好的兼容性和可复用性,使我受益匪浅。

posted @ 2021-09-28 22:36  MonkeymanHNU  阅读(57)  评论(0)    收藏  举报