结对编程代码项目总结
结对编程项目总结
1. 负责的模块
这次项目的分工,我们小组采用了前后端分离的开发模式,前端即网页显示,后端由我负责,采用了spring和spring-MVC框架进行开发。后端的工作主要分为以下几大模块:验证登录模块、生成题目和答案模块、存取文件模块。
2.后端开发的主要结构设计
- 采用了spring-mvc框架来解决前后端交互的响应问题。MVC,对应的是Model(数据模型)、View(界面显示),Controller(业务处理逻辑)。
- 采用了spring框架来对各个层次之间提供的接口和服务进行管理和创建。
- 项目的包结构图
|--controller
|--RegisterController
|--MakeQuestionController
|--CheckAnswerController
|--Service
|--QuesService
|--SmsService
|--Dao
|--QuesDao
|--Util
|--MakeExpressions
|--FileIO
|--RandomUtil
|--json
|--DB
|存储的文件
-
和前端的数据交互主要通过json格式进行数据传递。一下是基于几个不同请求所设计的json数据格式(后端--->前端):
-
//验证码的检验 { state:'状态码' message:'提示信息' } //生成题目 { m_questionsAndAnswers:{ '封装题目描述和答案的map' } } -
基本流程图:
![]()
3.代码的复用
由于在个人项目的阶段时,我已经模仿了MVC的模式来对项目的功能模块进行组织,所以大部分代码都可以对应到结对编程项目。改变的话只增添了几个接口,以提供各个层之间的调用。整体来说,代码的复用率还是比较高的。以下几个模块都是复用的例子:
-
生成题目模块:
public void BuildTree()
{
TreeNode leftTree,rightTree,leftnode,rightnode;
if (m_operatornums==1)
{
leftTree = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
rightTree = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
m_root = new TreeNode(RandomUtil.GetRandomOperator(), leftTree, rightTree);
}
else
{
int index = 0;
int n = depth()-3;
boolean[] location = RandomUtil.GetRandomLocation(m_operatornums);
m_root = new TreeNode(RandomUtil.GetRandomOperator(), null, null);
m_res.add(m_root);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < (int)Math.pow(2, i); j++,index++)
{
leftTree = new TreeNode(RandomUtil.GetRandomOperator(),null,null);
rightTree = new TreeNode(RandomUtil.GetRandomOperator(),null,null);
m_res.get(j+index).setM_left(leftTree);
m_res.get(j+index).setM_right(rightTree);
m_res.add(leftTree);
m_res.add(rightTree);
}
}
for (int i = 0; i < location.length; i++)
{
if (location[i])
{
leftnode = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
rightnode = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
if(i%2==0)
{
leftTree = new TreeNode(RandomUtil.GetRandomOperator(), leftnode, rightnode);
m_res.add(leftTree);
m_res.get(index).setM_left(leftTree);
}
else
{
rightTree = new TreeNode(RandomUtil.GetRandomOperator(), leftnode, rightnode);
m_res.add(rightTree);
m_res.get(index).setM_right(rightTree);
}
}
else
{
if (i%2==0)
{
leftTree = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
m_res.get(index).setM_left(leftTree);
}else
{
rightTree = new TreeNode(String.valueOf(RandomUtil.GetRandombumber(100)), null, null);
m_res.get(index).setM_right(rightTree);
}
}
index +=i%2; 
}
}
- 所有的工具类模块(这里就不一一列举):

心得
这次算是第一次和同学合作一起完成一个项目了,有挺多感触。首先两个人一定要把项目的需求分析做得清晰明确,这一步宁可花多以一点时间。其次,在开发过程中,一定要及时、准确得进行交流。这次得项目我们采用了前后端分离的开发模式,更要对前后端提供的接口和传输的数据格式进行及时对接,否则后面修改的工作量会大大增加;最后就是代码的复用,这一点可以提高我们的开发效率;由于个人项目时,我都按照各个模块功能进行封装和抽象,所以一些功能模块直接调用他提供的接口即可实现其功能。总之,在为期5天的开发中,有幸结识了优秀的队友,也将自己所学知识应用到了实际开发中,更一步加深了我对知识的理解。


浙公网安备 33010602011771号