Contents
  1. 1. 代码语法约定
    1. 1.1. 框架设计
    2. 1.2. 目录
    3. 1.3. 代码组织结构
      1. 1.3.1. common包命名:
      2. 1.3.2. core包命名:
      3. 1.3.3. api包命名
      4. 1.3.4. protocol包命名:
      5. 1.3.5. 缩写使用
      6. 1.3.6. 类命名
        1. 1.3.6.1. 命名常用后缀及方法
      7. 1.3.7. 方法命名
      8. 1.3.8. 变量命名
    4. 1.4. 日志系统:
    5. 1.5. 异常系统
    6. 1.6. 工程入手须知
      1. 1.6.1. maven 3.3.9
      2. 1.6.2. eclipse java-code style-code template
      3. 1.6.3. eclipse java-editor-templates
    7. 1.7. 文档管理

代码语法约定

框架设计

  1. alibaba-dubbo
  2. google-protobuf
  3. netty4
  4. jdk8
  5. spring4
  6. mybatis
  7. redis3

目录

  1. 代码组织结构
  2. 缩写使用
  3. 类命名
  4. 方法命名
  5. 字段命名
  6. 日志系统
  7. 异常系统
  8. 工程入手
  9. maven-settings
  10. eclipse-javadoc
  11. log-template

代码组织结构

###系统命名

groupId: ${group}
artifactId: lvb-${system}-${module}
${module}分common, core, api, protocol等模块

common包命名:

  • ${group}.${system}.${module}
  • ${group}.${system}.${module}.common

core包命名:

  • ${group}.${system}.${module}
  • ${group}.${system}.${module}.model
  • ${group}.${system}.${module}.mappers
  • ${group}.${system}.${module}.inner.service
  • ${group}.${system}.${module}.inner.service.impl
  • ${group}.${system}.${module}.outter.service
  • ${group}.${system}.${module}.outter.service.impl
  • ${group}.${system}.${module}.util

api包命名

  • ${group}.${system}.${module}.web
  • ${group}.${system}.${module}.web.controller
  • ${group}.${system}.${module}.web.filter
  • ${group}.${system}.${module}.web.listener
  • ${group}.${system}.${module}.web.util

protocol包命名:

${group}.${system}.${module}.* OutterService

缩写使用

除对于各行业熟知不会有歧义的词[如URL],不建议使用缩写,如ADDR、TEL、US、HK,原因在于缩写会使得小写化时的驼峰难以理解,同时spring的Bean自动命名规则使得只小写首字母生成的bean名难以理解

类命名

####原则-编号重要性递减

  • 对于继承类沿用父类的命名规则
  • 使用名词+动词形式的驼峰结构
  • 对于接口实现类,尽量保持与接口后缀相同

    命名常用后缀及方法

  • 抽象类: Abstract${name}
  • 接口类: ${name}${Action},${name}Service, ${name}ServiceWrap
  • 数据类: ${name}DBDao, ${name}CacheDao
  • 工具类: ${name}Utils
  • 枚举类: ${name}Enum,${name}Type,${name}Statu,${name}

方法命名

  • 原则: 动词-名词的驼峰结构
  1. 判断函数: 输出bool值,is${statu}, exist${status}
  2. 断言函数: 输出异常,validate${status}
  3. 增删查改
    • 确定性id查询使用get前缀
    • 函数名前缀及返回值规则list set zset|K-V
    • 添加用add|set,返回boolean
    • 删除remove|del,返回用boolean
    • 查询集合用query
    • 查询存在用isMember|exists
    • 全部删除使用clear

变量命名

  • 常量: 单词与单词之间以” _“隔开。public final static
  • 变量: 类型的首字母小写化后进行命名,如果有重复,前缀区分,后缀取类名
  • 参数:参数重要性进行排序, 如果使用引用类型进行形参结果返回,dest在后, source在前

日志系统:

  • 使用logback输出到文件,自动按max-size进行切分,后期有必要进行接口输出
  • 输出目的: 对于错误日志进行分析,解决bug, 判断系统运行稳定性、压力点,进行事故原因分析
  • 输出原则: 由于错误警告日志的分析不能离开上下文日志,所以不能单独完全按照LEVEL进行分开输出
  • 输出方法:
    • 对于警告及错误日志进行单独文件输出,及时快读找到报错及不稳定点。
    • 对于info信息进行临界值输出,达到info级别的日志全部输出到同一文件,在找到警告及错误信息后在该日志寻找上下文信息。

异常系统

凡是为可能为跨语言client提供接口服务的系统都需要捕获异常,给client提供code&reason

工程入手须知

maven 3.3.9

<profile>
    <id>nexus</id>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
        <project.build.targetJdk>1.8</project.build.targetJdk>
    </properties>
    <repositories>
        <repository>
            <id>nexus</id>
            <url>http://192.168.1.26:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <url>http://192.168.1.26:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>

eclipse java-code style-code template

/**
 * Copyright 2016 © ****.com Corp. All Rights Reserverd.
 *
 * 广州****技术有限公司    http://www.****.com
 *
 * Create Date : ${date}
 **/
${package_declaration}

/**
 *
 * @author <a href="mailto:${name}@*.com">${name}</a>
 *
 */
${type_declaration}

eclipse java-editor-templates

${:import(org.slf4j.Logger,org.slf4j.LoggerFactory,org.slf4j.Logger,org.slf4j.Logger)}
private static final Logger logger = LoggerFactory.getLogger(${enclosing_type}.class);

文档管理

使用Markdown语法
使用reflow-maven-skin,可参考源代码available on GitHub

Contents
  1. 1. 代码语法约定
    1. 1.1. 框架设计
    2. 1.2. 目录
    3. 1.3. 代码组织结构
      1. 1.3.1. common包命名:
      2. 1.3.2. core包命名:
      3. 1.3.3. api包命名
      4. 1.3.4. protocol包命名:
      5. 1.3.5. 缩写使用
      6. 1.3.6. 类命名
        1. 1.3.6.1. 命名常用后缀及方法
      7. 1.3.7. 方法命名
      8. 1.3.8. 变量命名
    4. 1.4. 日志系统:
    5. 1.5. 异常系统
    6. 1.6. 工程入手须知
      1. 1.6.1. maven 3.3.9
      2. 1.6.2. eclipse java-code style-code template
      3. 1.6.3. eclipse java-editor-templates
    7. 1.7. 文档管理