结对编程代码项目总结

结对编程项目总结

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; ![](https://img2020.cnblogs.com/blog/2084564/202010/2084564-20201010182819447-969383136.png)

				
			}
			
		}
  • 所有的工具类模块(这里就不一一列举):

心得

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

posted @ 2020-10-10 18:29  全鸿润  阅读(141)  评论(0)    收藏  举报