福大周润发--项目Alpha冲刺--代码规范、冲刺任务与计划

这个作业属于哪个课程 2021春软件工程实践S班 (福州大学)
这个作业要求在哪里 团队作业五——站立式会议+alpha冲刺
团队名称 福大周润发队
团队成员 柯少彬、陈皓宇、梁扬新、陈杉、池毓地、李家成、黄凯荣、黄钰栋、陈力涵
这个作业的目标 编写代码规范,确立冲刺任务与计划
其他参考文献 阿里巴巴Java开发手册

代码规范

编程规约

命名风格

  • 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
  • 2.类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/ BO / DTO/ VO/ AO。
  正例:MarcoPolo/ UserDO/ XmlService/ TcpUdpDeal/ TaPromotion
  反例:macroPolo/ UserDo/ XMLService/ TCPUDPDeal/ TAPromotion
  • 3.方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
    正例:localValue/ getHttpMessage()/ inputUserId

  • 4.抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。

常量定义

  • 1.不允许任何魔法值(即未经定义的常量)直接出现在代码中。
    反例:Stringkey="Id#taobao_"+tradeId;cache.put(key, value)
  • 2.如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面正例中的数字就是延伸信息,表示星期几。
    正例:public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}

注释规约

  • 1.类、类属性、类方法的注释必须使用Javadoc规范,使用/**内容*/格式,不得使用//xxx方式.
  • 2.所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
  • 3.对于注释的要求:第一、能够准确反应设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。
  • 4.特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。

安全规约

  • 1.用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库。

MySQL数据库

  • 1.表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)。
  • 2.表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。说明:MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。
  正例:aliyun_admin,rdc_config,level3_name
  反例:AliyunAdmin,rdcConfig,level_3_name

*3.字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:1)不是频繁修改的字段。2)不是varchar超长字段,更不能是text字段。
正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储类目名称,避免关联查询。

服务器

    1. 服务器内部重定向使用forward;外部重定向地址使用URL拼装工具类来生成,否则会带来URL维护不一致的问题和潜在的安全风险。
  • 2.给JVM设置-XX:+HeapDumpOnOutOfMemoryError参数,让JVM碰到OOM场景时输出dump信息。

SQL语句

  • 1.不要使用count(列名)或count(常量)来替代count(),count()是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。
  • 2.使用ISNULL()来判断是否为NULL值。说明:NULL与任何值的直接比较都为NULL。
    1)NULL<>NULL的返回结果是NULL,而不是false。
    2)NULL=NULL的返回结果是NULL,而不是true。
    3)NULL<>1的返回结果是NULL,而不是true。

并发处理

  • 1.获取单例对象需要保证线程安全,其中的方法也要保证线程安全。
  • 2.创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。
正例:public class TimerTaskThread extends Thread {     
        public TimerTaskThread(){         
              super.setName("TimerTaskThread");...
        }
  • 3.线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
  • 4.SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。
  • 5.高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。
  • 6.使用CountDownLatch进行异步转同步操作,每个线程退出前必须调用countDown方法,线程执行代码注意catch异常,确保countDown方法被执行到,避免主线程无法执行至await方法,直到超时才返回结果。
  • 7.在并发场景下,通过双重检查锁(double-checkedlocking)实现延迟初始化的优化问题隐患(可参考The"Double-CheckedLockingisBroken" Declaration),推荐解决方案中较为简单一种(适用于JDK5及以上版本),将目标属性声明为volatile型。
  • 8.ThreadLocal无法解决共享对象的更新问题,ThreadLocal对象建议使用static修饰。这个变量是针对一个线程内所有操作共享的,所以设置为静态变量,所有此类实例共享此静态变量,也就是说在类第一次被使用时装载,只分配一块存储空间,所有此类的对象(只要是这个线程内定义的)都可以操控这个变量。

冲刺任务

阶段 时间 任务
第一阶段 4.29-5.1 学习预备知识,javafx,服务器,多线程以及测试的必要知识
第二阶段 5.2-5.5 GUI的基本实现
第三阶段 5.6-5.8 系统邮件、好友列表、聊天室的实现
第四阶段(最主要阶段) 5.9-5.11 画板、联机实现
最后阶段 5.12-5.14 优化
人员 任务
柯少彬 服务器的搭建、游戏主体的实现
陈杉 辅助服务器的搭建、游戏主体的实现,GUI设计
李家成 GUI设计
黄钰栋 聊天室实现、辅助GUI设计
陈皓宇 聊天室实现、辅助GUI设计
黄凯荣 测试、辅助聊天室实现
池毓地 辅助聊天室实现、演示、游戏胜负判定逻辑
梁扬新 游戏胜负判定逻辑,好友列表实现
陈力涵 文裆、系统邮件实现
posted @ 2021-05-14 15:48  福大周润发  阅读(63)  评论(2编辑  收藏  举报