`
luoshi0801
  • 浏览: 147396 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

技术编码规范

 
阅读更多

最近为公司整理了下技术编码规范,主要是统一下研发风格并从长远看提高整个团队的工作效率。如下:

一、Git工程

 

1.1 使用maven创建依赖工程,上传到公司githttp://10.1.xx.xx:8080/groups/koudai,初创者拥有owner权限,相关开发developer,其它一律guest

 

1.2 工程结构,以dump-consle子工程为例



  

  • src/filters:工程配置目录,一般包括线上配置prod.properties和日常配置daily.properties
  • src/main/java:代码目录
  • src/main/resource:工程资源目录,包括bean配置子目录,脚本子目录bin
  • src/main/webapp:标准web目录
  • src/main/test:单元测试目录,和src/main/java对应
  • target:本地编译打包目录

 

1.3  完善README.md,如果是项目工程,须包括:

  • 项目背景
  • 项目目标
  • 项目环境
  • 项目成员
  • 项目说明

1.4 工程文档,在工程根目录下建立docs目录,存放相关需求分析、详细设计、测试文档、图片、参考资料等

 

1.5 建立.gitignore,禁止提交以下类型文件

  • *.classpath
  • *.project
  • *.setting
  • target

 1.6 主干与分支

      开发一律走分支,禁止主干开发。分支命名以“项目_分支日期_分支应用”格式,如“dump_20150618_ic-delta-binlog”。分支提交以一个完整的feature作为commit点,写清comment。分支的合并如果是持续性的功能开发分支建议用rebase来保持主干的线性变化,修改bug等临时分支用merge操作

 

1.7 版本控制

     开发过程中被其它项目依赖时,需要提供内部二方包,如“category-client-1.0.0-snapshot.jar”,最好将源码包一并上传。正式release的不要加上snapshot,版本的演化用数字递增(如小改动升级1.0.1,大改动升级为2.0.0)

 

二、代码风格

以下内容均在eclipse调试配置通过,可以直接将附件的模版文件导入即可

2.1 clean up

  • 删除非静态访问变量的“this”修饰符
  • 删除未使用的import语句
  • 删除未使用到局部变量
  • 删除不必要的casts溯型
  • 添加“@Override”注释
  • 添加“@Deprecated”注释
  • 添加继承接口中未实现的方法
  • 使用声明成员变量替换对非静态变量的访问
  • 控制语句增加块结构

2.2 code template

  • 新建类自动添加类扫描
  • 新建方法自动添加方法扫描

 

/**

 * <p>文件名称:${file_name}</p>

 * <p>文件描述:</p>

 * <p>版权所有:版权所有(C)2011-2099</p>

 * <p>   司:口袋购物</p>

 * <p>内容摘要:</p>

 * <p>其他说明:</p>

 * <p>完成日期:${date}</p>

 *

 * @version 1.0

 * @author ${USER}

 */

 

/**

 * <p>功能描述:</p>

 * <p>创建人:${user}</p>

 * <p>创建日期:${date} ${time}</p>

 *

 * ${tags}

 

 */

 

2.3 formatter

  2.3.1 缩进

  制表符tab使用4个空格,缩进大小也为4个空格,需要缩进情况:

  • 类body声明
  • 枚举类型/枚举常量声明
  • annotation声明
  • 方法/构造器声明
  • 代码块声明
  • switch body声明
  • case body声明
  • break语句

  2.3.2 括号

  • 类/接口声明
  • 匿名类声明
  • 方法/构造器声明
  • 枚举类/枚举常量声明
  • annotation声明
  • 代码块声明
  • case/switch语句
  • 数组初始化

  2.3.3 空格

     类、成员变量、局部变量、构造器、方法、labels、annotations、枚举、lambda声明,如下

   

class MyClass implements I0, I1, I2 {

}

 

AnonClass = new AnonClass() {

    void foo(Some s) {

    }

};

 

int a = 0, b = 1, c = 2, d = 3;

 

MyClass() throws E0, E1 {

    this(0, 0, 0);

}

 

MyClass(int x, int y, int z) throws E0, E1 {

    super(x, y, z, true);

}

 

void foo() throws E0, E1 {

};

 

void bar(int x, int y) throws E0, E1 {

}

 

void format(String s, Object... args) {

}

 

label: for (int i = 0; i < list.length; i++) {

    for (int j = 0; j < list[i].length; j++)

        continue label;

}

 

@Annot(x = 23, y = -3)

public class A {

}

 

enum MyEnum {

    GREEN(0, 1), RED() {

        void process() {

        }

    }

}

 

@interface MyAnnotation {

    String value();

}

 

@interface OtherAnnotation {

}

 

 Runnable r = () -> process();

 
   控制语句

int a = 4;

foo();

bar(x, y);

          

if (true) {

    return 1;

} else {

    return 2;

}

          

if (condition) {

    return foo;

} else {

    return bar;

}

          

for (int i = 0, j = array.length; i < array.length; i++, j--) {

}

for (String s : names) {

}

          

switch (number) {

    case RED:

        return GREEN;

    case GREEN:

        return BLUE;

    case BLUE:

        return RED;

    default:

        return BLACK;

}

          

while (condition) {

}

;

do {

} while (condition);

          

synchronized (list) {

    list.add(element);

}

          

try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = newFileReader("file2")) {

}

          

try {

    number = Integer.parseInt(value);

} catch (NumberFormatException e) {

}

          

assert condition : reportError();

          

return (o);

          

throw(e)

 
    表达式

foo();

bar(x, y);

          

String str = new String();

Point point = new Point(x, y);

          

MyClass() throws E0, E1 {

    this(0, 0, 0);

}

          

MyClass(int x, int y, int z) throws E0, E1 {

    super(x, y, z, true);

}

          

List list = new ArrayList();

int a = -4 + -9;

b = a++ / --number;

c += 4;

boolean value = true && false;

          

result = (a * (b + c + d) * (e + f));

          

String s = ((String) object);

          

String value = condition ? TRUE : FALSE;

 

   数组

int[] array0 = new int[] {};

int[] array1 = new int[] {1, 2, 3};

int[] array2 = new int[3];

          

array[i].foo();

 

参数化类型

 

Map<String, Element> map = new HashMap<String, Element>();

          

x.<String, Element> foo();

          

class MyGenericType<S, T extends Element & List> {

}

 

          

Map<X<?>, Y<? extends K, ? super V>> t;

 

  2.3.4 空白行

  •   package声明后空一行
  • import语句前空一行
  • 在import组之间空一行
  • 在import声明后空一行
  • 类声明之间空一行
  • 内部类、方法、同类声明前空一行

 

  2.3.5 换行

  行宽160个字符,默认换行缩进2个字符,默认数组初始化缩进2个字符,需要换行情况

  • 类、匿名类、方法body须新起一行
  • 枚举类、枚举常量声明须新起一行
  • 代码块须新起一行
  • annotation新起一行 

 

2.4 organize imports

  • package声明必须在import语句之前
  • import顺序,以包头为准 java > javax > org > com
  • 禁止在import语句中使用通配符*

 

三、命名规范

3.1 package

     以com.koudai.${project}.${module}开头,所有包名的单词均小写

3.2 类

     以大写字母开头其它字母小写的单词,多个单词组成时首字母大写

3.3 常量

     static final修饰,单词全部大写,多个单词之间用“_”分隔

3.4 方法

     首字母小写的单词,多个单词除第一个外后面所有单词首字母大写

3.5 方法参数

     使用有意义的参数命名,尽量和需要赋值的变量保持一致

3.6 数组

     使用byte[] buffer 而不是 byte buffer[]

3.7 其它

  •   接口实现后面加上Impl
  • 异常定义后面加上Exception
  • 抽象类以Abstarct开头
  • 测试类后面加上Test

 

四、书写规范

4.1 返回值

      void方法无需返回;如果方法返回集合对象,在无元素时应返回大小为0的空集合而不是null对象;当需要返回null对象时,优先考虑使用自定义的NullObject替换null

 

4.2 异常处理

  • 尽早抛出,延迟捕获
  • 不要为每个可能出现的异常使用try-catch
  • 不要在代码中捕获或抛出Error
  • 声明或捕获应是具体的类型异常,而非Throwable和Exception
  • 在循环外而非循环中处理异常
  • 千万不要捕获甚至吃掉自己不能处理的异常

4.3 表达式

     复杂的算术、逻辑表达式须加括号,避免使用java默认的运算优先级,如(5 *(x - y))/ (4 + y)

     尽可能使用二元赋值运算符,如 x+=1 而非 x = x + 1

 

4.4 控制语句

  • 避免使用while(true)这样的循环判断
  • 对与iterator迭代类型的集合,使用foreach替换for进行集合遍历
  • for循环中的递增变量使用 ++i 而非 i++
  • switch必须包含default语句
  • 条件分支if-else中的else if保持在同一行代码
  • 优先考虑条件运算符替换if-else判断

4.5 注释

  • 常量、类型成员变量、方法尽量加注释
  • 容易引起歧义的地方、算法、业务相关处理加注释
  • 注释风格保持一致,避免中英文夹杂
  • 行注释统一放在被注释的代码上一行
  • 养成使用TODO、FIXME的习惯 

 

  • 大小: 139.5 KB
分享到:
评论

相关推荐

    JAVA技术编码规范9/11

    【JAVA技术编码规范9/11】是一份针对初级开发者制定的编程标准,旨在提高代码质量和可维护性。这份规范涵盖了多个重要的编程实践,对于初入IT行业的开发人员来说是极有价值的指南。以下是对这些规范的详细解读: 1....

    java 技术部编码规范

    ### Java技术部编码规范知识点详解 #### 一、引言 **1.1 为何要有编码规范** 在软件开发过程中,编码规范具有重要的意义。它不仅有助于提高代码的可读性和可维护性,还能帮助团队成员更好地理解彼此的代码。具体...

    团队项目开发"编码规范"

    原文作者: EricHu (挺不错的,我推荐其中的编码规范那篇文章) 规范的编码风格不仅体现了一个人的技术水平,从某种意义上说也体现了一个企业的形象。好的、规范的编码风格,对于整个项目团队来说显得尤为重要。本...

    Android客户端编码规范

    ### Android客户端编码规范详解 #### 一、引言 在软件开发过程中,编码规范的制定对于提高代码质量、增强团队协作效率以及维护项目的可持续性至关重要。Android客户端编码规范旨在为开发者提供一套统一的标准,...

    C语言编码规范.pdf

    C语言编码规范 C语言编码规范是编写高质量C语言代码的重要指南。遵守这些规则可以确保代码的可读性、可维护性和可靠性。本文将详细介绍C语言编码规范的各个方面,包括文件组织、命名约定、编程风格、注释、错误处理...

    Android开发框架与编码规范

    Android 开发框架与编码规范是指在 Android 平台上进行应用程序开发时所采用的技术框架和编码规范。这个框架和规范的目的是为了提高应用程序的可维护性、可读性和可扩展性,提高开发效率和质量。 Android 开发...

    DotNet编码规范.doc

    《C#通用编码规范》是GDTEC公司为新员工培训和技术部门制定的一份详尽的编程指导文档,旨在提高代码质量和团队协作效率。本文档主要涵盖了注释规范、.NET编码规范和数据库编码规范等多个方面,以下是这些规范的详细...

    华为软件开发编码规范和范例

    3. **华为编码规范**:华为的编码规范不仅限于技术细节,更注重团队协作和项目管理。例如,它可能要求开发者提交代码前进行代码审查,使用版本控制工具,遵循变更管理和文档编写的规定。此外,它还强调代码的可测试...

    江西微软技术部经理编写的C#编码规范PPT

    本文将深入探讨由江西微软技术部经理编写的C#编码规范,涵盖多个方面,包括命名规则、注释规范、代码格式以及SQL编码规范。 首先,**命名规范**是编码规范的核心之一。在C#中,推荐使用Pascal大小写(每个单词首...

    Verilog编码规范.docx

    《Verilog编码规范》是西安交通大学人机所电视组和创芯公司共同制定的一份文档,旨在提升DTV系列芯片Verilog源码的可读性、健壮性和易维护性。这份规范不仅适用于Verilog,也适用于类似的语言如VHDL。编码规范的重要...

    Google编码规范 之C中文版

    **Google编码规范 之C中文版** 在编程领域,遵循一套良好的编码规范是至关重要的,它不仅能够提高代码的可读性,降低维护成本,还能提升团队协作效率。Google作为全球知名的科技公司,其制定的编码规范被广泛认可并...

    JAVA编码规范试题

    JAVA编码规范是软件开发中不可或缺的一部分,它不仅有助于提高代码的可读性和可维护性,还能促进团队协作,减少潜在的编程错误。以下是从给定的文件信息中提炼出的关键知识点,涵盖了JAVA编码规范的基本原则、文件...

    集成编程环境与编码规范

    ### 集成编程环境与编码规范 #### 实验目的 本实验旨在让学习者深入了解并熟练掌握PHP、.Net、JAVA三种主流编程语言的集成编程环境及其编码规范。通过本实验的学习,学习者不仅能够熟悉这些编程语言的基础知识,还...

    编码规范文档

    本规范可能引用了其他技术文档、设计原则或行业标准,如Google编码规范、PEP 8(Python编码规范)等,这些文件提供了更具体的指导。 1.4 术语表 术语表列举了文档中使用的关键术语和定义,以便读者理解。 1.5 参考...

    百度java编码规范

    百度作为一家技术驱动的公司,也提出了其内部使用的Java编码规范,旨在确保代码的一致性和专业性。 ### 1. 代码书写 #### 1.1 K&R代码风格 百度Java编码规范要求程序块采用K&R(Kernel Normal Routine)代码风格...

    编码规范用于VB开发

    - 定期回顾并更新个人的编码规范,适应新技术和编程标准的变化。 总之,编码规范是软件工程的基础,通过遵循一套详尽的规范,如本文所述的VB开发规范,可以显著提升软件的质量和开发效率。开发者应将其视为一项长期...

    编码规范(C++、Java)

    编码规范不是一成不变的,随着技术发展和最佳实践的积累,编码规范也会不断更新和完善。开发者应持续学习,理解和遵循这些规范,以提升自己的编程水平。在实际工作中,结合具体项目和团队习惯,灵活应用编码规范,...

    个体软件过程与编码规范PPT

    【个体软件过程与编码规范】是软件开发领域中一项至关重要的实践,旨在提高代码质量、增强团队协作效率以及促进软件产品的可维护性。在国家级精品课程《个体软件过程与编码规范》中,深入探讨了这一主题,以帮助...

Global site tag (gtag.js) - Google Analytics