1.代码地址
https://git.coding.net/wowomilkycandy/OPERATION.git
2.psp
PSP |
任务内容 |
计划时间(min) |
完成时间(min) |
Planning |
计划 |
40 |
60 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
40 |
60 |
Development |
开发 |
55.5*60 |
68.6*60 |
Analysis |
需求分析 |
50 |
45 |
Design Spec |
生成文档 |
0 |
0 |
Design Review |
设计复审 |
2*60 |
4*60 |
Coding Standard |
代码规范 |
15 |
15 |
Design |
具体设计 |
16*60 |
10*60 |
Coding |
具体编码 |
12*3*60 |
12*4*60 |
Code Review |
代码复审 |
5*60 |
5*60 |
Test |
测试 |
25 |
40 |
Reporting |
报告 |
9*60 |
|
Test Report |
测试报告 |
20 |
10 |
Size Measurement |
计算工作量 |
40 |
60 |
Postmortem& ProcessImprovement Plan |
事后总结, 并提出过程改进计划 |
2*60 |
5*60 |
3.接口设计方法
在接口设计之前,我们查阅了CSDN上面一些对于接口设计的指导资料,了解到了一些在设计接口时的一些规范性原则,本着降低代码耦合度的原则,延续个人独立作业的中的代码特点,将不同方法 放入到不通的类中,模块化地将各个类相互独立,算式生成、算式计算、判断正误等相关方法,并且贯彻接口设计中命令(改变对象状态的方法)与查询(返回一个值来回应一个问题的方法)分离的 原则
面向对象设计最大的原则就是针对接口设计。可见接口的重要性,如果接口能够定义好,不仅便于自身维护,而且也导致上层应用不需要太多变动,下面是接口设计的原则,只有按照原 则才可能设计出高性能的接口。
接口设计原则:
原则一:必须符合Restful,统一返回格式,约定业务层错误编码,每个编码可以携带可选的错误信息。
原则二: 命名必须规范、优雅。
原则三:单一性
原则四:可扩展
原则五:必须有文档。良好的接口设计,离不开清晰的接口文档表述,文档表述一定要足够详细。
原则六:产品心。
原则七:第三方服务接口数据能缓存就缓存。
原则八:第三方服务需要做降级。
原则九:建议消除单点。
原则十:接口粒度要小。
原则十一:客户端能处理的逻辑就不要给服务端处理,减少服务端压力。
原则十二:资源预加载。
原则十三:不要过度设计。
原则十四:缓存尽量不要穿透。
原则十五:接口能缓存就缓存。
原则十六:思辨大于执行
高性能:如果我们发现这个接口tps和响应时间没有达到我们的要求怎么办。
-
A:数据存储方面:我们会想数据库有没有分库、分表、有没有做主从,有没有读写分离、字段是否有加索引、是否存在慢 sql,数据库引擎是否选用合适、是不是用了事务;
其次我们会想到是不是引用了分布式缓存、缓存 key 大小是否合适,失效时间是否设置合理,会不会大量缓存穿透、有没有引入本地缓存。
-
B:业务方面:是否有大量的计算、能否异步处理。是否需要引入线程池或者 MQ 来异步处理任务。有没有必要将接口进行垂直拆分和水平拆分、将接口粒度变小。
-
C:其他方面:nginx 层面做缓存、加机器、用 ssd,资源放 cdn,多机房部署、资源文件预加载。
高可用:如何保证服务高可用,需要从几个维度来实现:
-
A:消除单点,基于高可用第二位。
-
B:能做集群的全部做集群。譬如 Redis 集群、mysql集群、MongoDB副本集。
-
C:能做读写分离的都做读写分离。
-
D:异地多机房部署,接入 GSLB
-
E:必须有限流、降级机制。
-
F:监控。高可用的保证,基于第一位。
4. 计算模块接口的实现与设计过程
1.生成算式:根据前台提供的是否有括号、乘除、算式长度、数目生成相应算式
2.计算:调用类1,将算式计算
3.判断:调用1,2,判断客户计算结果是不是与正确结果相等
4.生成文本文件:调用1,2,将算式打印
5.计算模块接口部分的性能改进
相较于前作的个人版本,本次计算接口主要是添加了括号,并且较于之前的所有数据都在0~100之间,本次采用前后端的设计,将前端作为输入口为计算接口提供参数数值限制、有无括号限制,其余 在大体上和前作差别不大
6.计算模块部分单元测试展示
7.计算模块部分异常处理说明
异常处理 在整个Java的异常处理中,实际上也是按照面向对象的方式进行处理的,处理步骤:
1,一旦产生异常,则首先会产生一个异常类的实例化对象。
2,在try语句中对此异常对象进行捕捉。
3,产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功则执行catch语句中的代码。
8.界面模块的详细设计过程
因项目采用的是网页,所以界面模块的设计即为网页的前端效果,网页整体采取较为简洁的页面风格,简单的将算式功能限制项依次罗列:是否有括号、数字范围、是否有乘除法、题目数量等依次罗 列,最后加上两个功能性按钮:1.生成文件;2.在线做题;选择2号功能后,页面即依次展现出题,并让使用者参与答题,每答对一道题即计数器加一(本来是准备设计成有注册登录页面的网页,并用 数据库保存用户答题信息,后来觉得这种处理方法过于麻烦,就直接采用答对一道题计数器加一,省去了数据库的使用)
9.界面模块与设计模块的对接
首先在设计前端页面时,即是根据后台对于数据的需求、以及对于算式的呈现进行设计的,在商定好了数据接口格式之后,我们采取了前后端同时开发的方法(实际上前端开发也没占用太多时间), 在修改数据名称、参数名后,完成接口对接、参数传递后就没了(虽然说的是这么简单,但是前前后后着实花了不少的时间去一点点摸索,因为之前都没怎么亲手尝试过前后端对接)
10.描述结对的过程
在处理结对项目上,我们主要是在清明节前确定了项目大概方向,具体功能,前端布局,后台所需要的方法,和具体分工。于清明节前将前端静态网页制作完成,清明节期间便开始一同处理后台的方 法以及完成前后台的链接,没有采用到书中所说两个人对着同一台电脑轮换指挥操作式更进项目进度,而是两人同时带上两台机器,分工梳理不通的类,然后完成整个jsp页面