第七次团队作业:代码规范与计划
| 这个作业属于哪个课程 | 2018级计算机和综合实验班 |
|---|---|
| 这个作业要求在哪里 | 第七次团队作业:Alpha冲刺 |
| 这个作业的目标 | 开发“悦读打卡”小程序 |
| 作业正文 | 见下文 |
| 其他参考文献 | ... |
代码规范思路
参照《clean code》这本书的规范点编写代码
一、整洁代码
概念:代码正确、简洁明了、清晰易读、短小精确
二、命名
1.准确:名字与意义匹配、易于区别
2.实用:使用读的出来的名称,使用可搜索的名称
3.明确:个概念对应一个词、不用双关语、使用有意义的语境
三、函数
1.短小
2.职责单一
3.一块代码中,函数的抽象层级需一致
4.函数命名规范
5.参数尽可能少
6.如果函数需要的参数要求数量有多种,应考虑将其封装成类
7.实用异常类代替返回错误码,抽离try/catch代码块,使代码更加简洁
四、注释
1.少用注释,尽可能通过规范的代码来表达
2.不使用无意义的注释
3.必要的注释:法律信息、提供信息的注释、对代码意图进行解释的注释、警示信息,防止踩坑、TODO注释:未来得及完成的部分
4. 对于无用的代码应直接删除而不是注释
五、格式
1.为什么需要规范格式,易维护,易拓展
2.垂直格式 行数少,短小精悍,概念隔离,不同的的概念/逻辑 代码实用空行隔离,相关靠近:对于关系紧密的代码,尽量写在一起
3.水平格式 缩进、对齐
六、对象与数据结构
区别:过程式代码便于在不改动既有数据结构的前提下添加新函数 面向对象代码便于在不改动既有函数的前提下添加新类,亦即:过程式代码难以添加新数据结构,因为必须修改所有函数面向对象代码难以添加新函数,因为必须修改所有类
七、错误处理
1.使用异常而非返回码:更加美观、整洁
2.使用不可控异常 可控异常的代价是违反开放/闭合原则,因为你需要在使用的地方捕获异常
3.在异常发生的地方添加环境说明:这样当异常发生的时候就可以根据这些信息定位异常原因
4.不返回null 也不传递null 这样在接收的时候不需要进行空值检查
八、边界
翻了下原书,边界是Boundaries 对于这个名字,开始不是大理解,就算现在看来也还是觉得不直观
标题略晦涩:作者的意思应该是让我们让自己的代码和第三方库代码不要耦合太紧密,需有清新的边界
九、单元测试
- TDD定律
在编写不能通过的单元测试前,不可编写生产代码 只可编写刚好无法通过的单元测试,不能编译也算不通过,只可编写刚好足以通过当前失败测试的生产代码----- 这三条写的有点绕,我的理解就是:要把测试代码当生产代码来写,测试也很重要
2.五大规则(F.I.R.S.T)
快速:就是代码质量要好,高效 独立:不同测试之间应相互独立 可重复:就是在各种环境中都可测试通过 自足验证:测试不依赖手工操作来知晓是否通过 及时:测试应在生产代码之前进行编写
十、类
主要注意一个点,类应短小,可通过以下两种方式达到此目的:1. 权责单一:一个类的权责不应太多,太多则需考虑拆成多个类了2. 高内聚:类的实体变量应尽可能少,类中方法尽可能多地使用到这些变量
十一、系统
1.系统构造与使用分开 工厂:使用工厂方法自行决定何时创建实例,但是构造细节却在其他地方 依赖注入:当A对B有依赖时,A中不负责B的实例化(这就是类的权责单一原则) 2.本章的后半部分提到的AOP,AspectJ等内容都以Spring,EJB等框架为例
十二、跌进
跌进这一章提到的点不多
1.运行所有的测试:为能方便测试,我们的生产代码也要足够短小,耦合度低 2.重构:在写代码过程中要及时重构,保持代码的优雅
3.不可重复:已有的代码要利用起来,消除重复
4.表达力强:这应该是一个目标或是结果,做好前边的工作自然而然可以达到
十三、并发编程
1.为什么:它可以将“目的”和“时机”分离,进行解耦
2.并发防御原则 单一权责:主要关注一点,并发相关的代码应分离出来 为此,三点建议:1).限制数据作用域 2).使用数据副本:这不就是ThreadLocsal么3).线程应尽可能地独立
3.学习已有类库:Java中的并发包之类
代码规范示例
1、相对独立的程序块之间、变量说明之后必须加空行。
示例:
if (!valid. ni(ni))
.. // program code
repssn_ ind=ssn_ datal index].repssn_ index;
repssn_ ni= ssn_ data[ index].ni;
应如下书写
if (!valid. ni(ni))
... // program code
repssn_ ind一ssn_ datalindex].repssn_ index;
repssn_ ni - ssn_ datalindex].ni;
2、循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低
优先级操作符处划分新行,操作符放在新行之首。
1f lltaskno < max_ act_ task. number)
&&(n7stat. stat_ item valid (stat_ item)1)
.... 1/ program code
for i- 0,J - 0; (i < BufferKeyword[word. index],word. length)
6s (] < NewKeyword.word. length); 1++,1++)
...11 program code
for (i- 0,」- 0;
(1< first. Word_ length) 6s (J < second. word_ length);
1+. J++)
. ..11 program code
3、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的
缩写,避免使人产生误解。
说明:较短的单词可通过去掉“元音"形成缩写:较长的单词可取单词的头几个字母形成
缩写:一些单词有大家公认的缩写。
示例:如下单词的缩写能够被大家基本认可。
temp可缩写为tmp ;
fiag可缩写为flg ;
statistle可缩写为stat ;
inerement可缩写为inc;
message可缩写为msg
4、源程序中关系较为紧密的代码应尽可能相邻。
说明:便于程序阅读和查找。
示例:以下代码布局不太合理。
rect.length = 10;
char_ poi = str;
rect.width = 5;
若按如下形式书写,可能更清晰一些。
rect.length - 10;
rect.width - 5; /矩形的长与宽关系较密切,放在一起。
char_ poi = str;
冲刺阶段的任务计划以及预期目标
1、任务计划
| 学号| 名字 | 工作内容|
| --------------------------------- | ----- | ----------------------------- | ---- |
| 211806139 |余秀璇|第一天,进行Java swing知识学习
第二天,进行Java swing知识学习
第三天,编写管理员系统图形化界面代码
第四天,编写管理员系统图形化界面代码
第五天,编写管理员系统图形化界面代码
第六天,编写管理员系统图形化界面代码
第七天,检查测试图形化界面与后端管理员功能的合并
第八天,检查测试图形化界面与后端管理员功能的合并
第九天,完善管理员图形化界面代码代码
第十天,完善管理员图形化界面代码代码| % |
| 211808672|王琪|第一天,编写博客
第二天,编写博客
第三天,编写博客
第四天,编写博客
第五天,编写博客
第六天,编写博客
第七天,编写博客
第八天,编写博客
第九天,编写博客
第十天,编写博客
| % |
211806157|陈彤 |第一天,进行后端知识学习
第二天,进行后端知识学习
第三天,编写管理员端功能代码
第四天,编写管理员端功能代码
第五天,进行打卡功能知识学习
第六天,编写客户端功能代码
第七天,编写客户端功能代码
第八天,编写客户端功能代码
第九天,检查测试后端功能代码
第十天,完善优化后端功能代码|
| 211806230 |林婷|第一天,组织小组会议并合影
第二天,组织小组会议并合影
第三天,组织小组会议并合影
第四天,组织小组会议并合影
第五天,组织小组会议并合影
第六天,组织小组会议并合影
第七天,组织小组会议并合影
第八天,组织小组会议并合影
第九天,组织小组会议并合影,开始拍摄vlog
第十天,组织小组会议并合影,进行vlog剪辑优化同时负责数据库优化 | % |
|211806242| 徐誉丹|第一天,进行后端知识学习
第二天,进行后端知识学习
第三天,编写管理员端功能代码
第四天,编写管理员端功能代码
第五天,进行打卡功能知识学习
第六天,编写客户端功能代码
第七天,测试客户端,修正bug
第八天,测试客户端,修正bug
第九天,测试管理员端,修正bug
第十天,测试管理员端,修正bug|
|211806184| 王美婉|第一天,进行Java swing知识学习
第二天,进行Java swing知识学习
第三天,编写管理员系统图形化界面代码
第四天,编写管理员系统图形化界面代码
第五天,编写管理员系统图形化界面代码
第六天,编写管理员系统图形化界面代码
第七天,检查测试图形化界面与后端管理员功能的合并
第八天,检查测试图形化界面与后端管理员功能的合并
第九天,完善管理员图形化界面代码代码
第十天,完善管理员图形化界面代码代码| % | |
2、预期目标
完成Java端的“悦读打卡”开发

浙公网安备 33010602011771号