结对编程code review
结对编程code review
一、项目简介与基本运行
1.项目名称:中小学数学试卷自动生成程序
2.项目要求:本项目应实现根据账户难度(小学、初中、高中)与用户输入题目数量,随机生成题目并保存为txt格式的基本功能。
3.编程语言:go
4.运行界面:
二、代码分析
侯茱元同学运用go语言对本次项目进行了构建。根据目录结构可看出,代码整体分为8个模块,功能如下。
main.go:主流程控制
config:获取配置文件链接及数据库定义
dao:控制器DI及数据库链接
entity:实例映射
model:试卷生成方法
schema:试卷类与登陆类定义
service:各接口实现
util:依赖注入与数据库初始化构建
在本次重点的试卷生成功能上,代码中实现了对随机种子的封装与应用,同时,试卷生成逻辑中以一个操作符与一个操作数为一组的形式进行循环生成(例如1+2+3=中,“1+”为一组随机生成,“2+”为一组随机生成,“=”为最后添加),代码示例如下:
strconv.Itoa(operandNumber) + juniorOperator[1] + baseOperator[index]
此外,个人项目完成中的一个难点——括号生成,在侯茱元同学的代码中解决地较为巧妙。
随机种子封装:
括号生成逻辑:
点击查看代码
// BaseGenerateWithBrackets 带有括号的题目
func BaseGenerateWithBrackets() string {
var tmp = randGenerator.Intn(4)
var num = randGenerator.Intn(100) + 1
var temp = randGenerator.Intn(4)
var tempNum = randGenerator.Intn(100) + 1
return "(" + strconv.Itoa(num) + baseOperator[tmp] + strconv.Itoa(tempNum) + ")" + baseOperator[temp]
}
// BaseGenerateCommon 普通题目
func BaseGenerateCommon() string {
var tmp = randGenerator.Intn(4)
var num = randGenerator.Intn(100) + 1
return strconv.Itoa(num) + baseOperator[tmp]
}
三、优缺点分析
1.优点
1)多态应用优异,各层级逻辑严谨
代码中对多态的使用灵活,对工厂与接口的实现分层实现,十分清晰。
点击查看代码
// IPaper 生成接口 多态实现
type IPaper interface {
GeneratePaper(username string, count int) error
}
2)可拓展性强
代码目录结构清晰,对各类、功能与接口进行了明确细致地划分,十分有利于后期功能拓展与项目扩大。
3)代码及文档写作十分规范
从代码中可以看出,侯茱元同学十分重视缩进、注释、变量命名等方面的规范化。同时,README.md文档也十分详尽地从技术到使用角度,对整体代码进行了描述。
2.缺点
1)结构略繁复
个人项目非web项目,整体架构可简化。可对部分内容进行整合,减轻结构。
四、总结
总体来看,侯茱元同学的代码整体结构清晰,代码书写规范,功能实现优异。同时使用了go语言与数据库操作,并对其优点进行了运用。该同学整体代码编写十分值得本人去学习。