结对编程代码分析
结对编程项目代码分析
1.项目的框架分析
1.1项目主要分为4个层次:
- 数据层POJO:该层主要用于存储用户试卷和用户信息
- 数据访问层DAO:该层主要提供了用于数据交互的一些接口
- 服务层Service:该层主要提供用于获取DAO层中的数据并提供给应用层进行数据操作的相关接口
- 应用逻辑层App:该层主要用于切换用户的登录状态和监听状态(包括退出系统、出题指令以及切换指令)
1.2 项目框架的优点
- 该项目结构大体上将数据层和应用逻辑层进行分离,很好的降低了层与层的依赖。
- 每一层都向上一层提供了可以调用该层的接口,使得各个模块、层与层之间耦合度降低,有利于维护、改错和扩展;想要添加一个额外功能,只需在提供接口的抽象类中声明即可。
- 将一些常用的且共用的功能模块进行了封装,实现了模块功能的复用性。
- 应用逻辑层引入了状态模式的设计模式,可以让不同的状态共享一个状态对象,减少了对象个数;
- 框架图:(划分得很清晰)
![]()
1.3项目框架的缺点
- 由于多层次的划分,使得访问数据需要经过层层调用,可能会影响系统的性能。
2.具体模块功能分析
2.1 生成表达式模块功能分析
- 优点:采用二叉语法树构建四则运算表达式;树形结构组织符合二元操作符的运算特点,生成表达式只需遍历二叉树,时间复杂度为O(n)
- 缺点:在生成初中高中题时,只考虑到了一元运算符后面只能是数字的情况,无法生成一元运算符后面跟一个表达式的表达式。
private TreeNode CreateTree(int numberOfNodes)
{
if (numberOfNodes == 1)
return new TreeNode(
WrapVal(randomInt(m_loVal, m_hiVal))
);
TreeNode sub1 = CreateTree(numberOfNodes / 2);
TreeNode sub2 = CreateTree((numberOfNodes + 1) / 2);
int operandIt = (int) Math.floor(Math.random() * 4 + 0);
if (Math.random() < 0.5)
return new TreeNode(sub1, doubleOperands[operandIt], sub2);
else
return new TreeNode(sub2, doubleOperands[operandIt], sub1);
}
2.2存储文件功能模块
- 对用户类对象实现了序列换接口,这是java提供的一种保存对象的机制,通过序列化将对象分解成字节流存入文件,再通过反序列化恢复对象,减少了文件读取时的出错率。
2.3 应用层逻辑模块
- 该项目中把状态分为两大类,一类是登录和退出状态,一类是监听状态,用于监听切换模式、出题、以及错误命令的输入。该模块使用状态模式进行设计,将两种状态的共性抽象出来:运行当前状态切换当前状态;然后将这种两种状态交由一个上下文对象进行管理。这种设计优点在于可扩展性好,后面如果想增加一个状态,只需继承抽象类并实现抽象方法即可。
- 各个交互功能实现都很好,没有出现错误提示;各个逻辑状态之间的切换也正常。
总结
该项目从项目框架、模块功能的封装、接口的使用等方面来看,都用的非常好,符合项目一般的构建规则。常量的使用使得代码简单易读,便于维护;各个类的命名、方法的命名以及变量的命名都清晰明义,代码可读性好;引入了设计模式的构建方法,具有较高的代码规范性。总之,这个项目有很多值得我学习的地方。


浙公网安备 33010602011771号