1 前言
1.1 适用范围
本规范自发布之日起执行,范围涵盖熙菱信息技术有限公司软件工程事业部所有在建的软件项目和研发中的软件产品。
1.2 文档约定
我们通过“要”、“考虑”、“避免”和“不要”四个词来区分本文中不同规范的级别
-
要:描述的是必须遵循的规范。违反该级别的规范而又具有正当理由的情况是极其罕见的;
-
考虑:描述的是在一般情况下应该遵循的规范,但如果完全理解规范背后的道理,并有很好的理由不遵循它时,也不要畏惧打破常规;
-
不要:描述的是一些几乎绝不应该违反的规范;
-
避免:描述的做法通常不好,但却存在一些已知的可以违反该规范的情况。
总体上说,“要”和“不要”具有强制性质,而“考虑”和“避免”则是一些建议。
2 标识符命名规范
对标识符的命名要使用英文单词,必要时可以使用汉语拼音的全拼,严禁使用简拼来为任何标识符命名。
2.1 命名风格概述
我们主要使用PascalCasing、camelCasing和SCREAMING_CAPS三种标识符的命名风格,涵盖java、javascript、sql等编程语言。html/dhtml、xml/xsd/xslt、css等另行描述。下面分别描述这三种风格:
-
PascalCasing风格
-
描述:把标识符中的每个单词的首字母(包括长度为2个字符以上的首字母缩写词)大写。两个字母长的首字母缩写词是一个特例,在这种情况下两个字母都要大写。
-
示例:
-
PropertyDescriptor
HtmlTag
IOStream
-
camelCasing风格
-
描述:把标识符中除了第一个单词之外的所有单词的首字母大写。
-
示例:
-
propertyDescriptor
htmlTag
ioStream
-
SCREAMING_CAPS风格
-
描述:标识符中所有字母均大写,单词之间用下划线分隔。
-
示例:
-
PROPERTY_DESCRIPTOR
HTML_TAG
IO_STREAM
2.2 关于首字母缩写词和单词缩写
-
避免在标识符中使用首字母缩写词,除非他们是被普遍使用的,例如HTML、XML、IO等。
-
不要在标识符中使用单词缩写。注意单词缩写与首字母缩写词是完全不同的,如XML是一个首字母缩写词,表示Extensible Markup Language。而单词缩写仅仅是把一个单词变短,如Number到num。
正确:public Window getWindow();
错误:public Window getWin();
public Window getWnd();
-
Id和Ok是两个比较特殊的缩写词,可以在标识符中使用。
-
在PascalCasing风格中,两个字母的首字母缩写词应该全部大写,如IOStream,超过两个字母的首字母缩写词只大写首字母,如HtmlTag。
2.3 关于复合词
-
不要把复合词中的每个单词的首字母大写
下表是一些常见的复合词和技术术语的拼写
PascalCasing风格拼写 |
camelCasing风格拼写 |
错误的拼写 |
BitFlag |
bitFlag |
Bitflag |
Callback |
callback |
CallBack |
Canceled |
canceled |
Cancelled |
DoNot |
doNot |
Dont |
|
|
|
Endpoint |
endpoint |
EndPoint |
FileName |
fileName |
Filename |
Gridline |
gridline |
GridLine |
Hashtable |
hashtable |
HashTable |
Id |
id |
ID |
Indexes |
indexes |
Indices |
LogOff |
logOff |
LogOut |
logOn |
logOn |
LogIn |
Metadata |
metadata |
MetaData,metadata |
Multipanel |
multipanel |
MultiPanel |
Multiview |
multiview |
MultiView |
Namespace |
namespace |
NameSpace |
Ok |
ok |
OK |
Pi |
pi |
PI |
Placeholder |
placeholder |
PlaceHolder |
SignIn |
singIn |
SignOn |
SignOut |
singOut |
SignOff |
UserName |
userName |
Username |
WhiteSpace |
whiteSpace |
Whitespace |
Writable |
writable |
Writeable |
2.4 java命名规范
2.4.1 包
-
要给java中的包赋予全小写字母的名字,哪怕是两个单词也不要用任何形式的分隔。为了遵循这一标准,请在为包命名时尽量用一个单词描述包
正确:java.usergroup
错误:java.userGroup
-
系统中的包路径设计要遵循如下规范:
-
第一级为固化的行业、产品线或者公司名,如数据管理产品的顶级包名为data、而公安行业项目的顶级包名为police
-
第二级为产品名称或项目名称,如数据管理产品线中的多维分析二级包名为data.analysis、公安行业的数据采集项目可以为police.dataimport
-
第三级包名为逻辑分层的名称,以多维分析为例:
data.analysis.domain 实体层
data.analysis.service 服务层
data.analysis.controller 页面后台
data.analysis.vo vo层
-
可根据具体用途扩展三级或四级包名,但顶级和二级包名应该是固定的。
-
在客服系统的开发中,要新建的包都在cn.qtone.callcenter下建立
2.4.2 类型
-
要使用PascalCasing风格的标识符来为java中的类型命名,包括类、枚举、接口和注解。
正确:public class RuleBuilder() {}
public interface RuleBuilder() {}
错误:public class ruleBuilder() {}
-
不要在接口前加I前缀,某些具有C#或其他编程模型(主要是COM)技术背景的程序员喜欢在接口前加以I前缀。
正确:public interface RuleBuilder() {}
错误:public interface IRuleBuilder() {}
-
考虑给类型命名时使用名词
-
考虑给抽象基类添加Abstract前缀,一个完整的继承层次应该具有如下的结构(更多信息可参考java的容器实现):
接口:DataSeracher
抽象基类:AbstractDataSearcher
实现类:DataSearcherHibernateImpl
DataSearcherIbitsImpl
-
避免引入太一般的类型名,比如Element、Node、Log和Message。这些名字很可能在常用的场景中引起类型冲突,应该给这些一般化的类型名加上修饰语(FormElement、XmlNode、EventLog和SoapMessage)。
-
避免给类型起会与java核心包或广泛使用的第三方包冲突的名字,比如srping中广泛使用的JdbcTemplate、hibernate中的SessionFactory等。
2.4.3 方法
-
要使用camelCasing风格的标识符为java中的方法命名。
正确:public void execute() {}
错误:public void Execute() {}
-
要给方法使用动词或动词词组的名词
2.4.4 成员变量
-
要使用camelCasing风格的标识符为java中的成员变量命名
-
不要给成员变量添加下划线或m_ 前缀
正确:private String name;
错误:private String _name;
private String m_name;
-
不要在给成员变量命名时使用匈牙利表示法(给变量加上代表类型的简写前缀)
正确:private String name;
错误:private String strName;
2.4.5 局部变量
局部变量的命名规范同成员变量,应该遵循如下两条基本规范:
-
要使用camelCasing风格的标识符为java中的成员变量命名
-
不要在给成员变量命名时使用匈牙利表示法(给变量加上代表类型的简写前缀)
2.4.6 常量
-
java中的常量即定义在类上的静态公有成员,一般不建议直接暴露成员变量,出于惯例的原因,一旦要使用常量,应该使用SCREAMING_CAPS风格为常量命名。
正确:public final static int MAX_NUMBER = 1000;
错误:public final static int maxNumber = 1000;
2.4.7 参数
-
要在给参数命名时使用camelCasing风格
-
要使用具有描述性的参数名
-
考虑根据参数的意思而不是参数的类型来命名参数,这样就能更好的利用参数名来描述语义,而不是描述类型。偶尔使用基于类型的参数名是可以的,但是在采用这些规范时再回到匈牙利命名法是绝对不应该的
2.4.8 资源名称
-
资源名称的命名规范同包的命名规范,即所有字母全小写,用点(.)分隔。
正确:platform.validation.name=example
platform.username=admin
错误:platform.Validation.Name=example
platform.userName=admin
2.5 注释的排版
/** * An example for comment formatting. */ package mypackage ;
/** * This is the comment for the example interface. */ interface Example { // This is a long comment that should be split in multiple line comments in // case the line comment formatting is enabled int foo3() ;
/* * * These possibilities include: <ul><li>Formatting of header * comments.</li><li>Formatting of Javadoc tags</li></ul> */
int foo4() ;
/** * * These possibilities include: * <ul> * <li>Formatting of header comments.</li> * <li>Formatting of Javadoc tags</li> * </ul> */
int bar() ;
/* * * These possibilities include: <ul><li>Formatting of header * comments.</li><li>Formatting of Javadoc tags</li></ul> */ int bar2() ; // This is a long comment that should be split in multiple line // comments in case the line comment formatting is enabled
int foo2() ;
/** * The following is some sample code which illustrates source formatting * within javadoc comments: * * <pre> * public class Example * { * final int a = 1 ; * final boolean b = true ; * } * </pre> * * Descriptions of parameters and return values are best appended at end of * the javadoc comment. * * @param a * The first parameter. For an optimum result, this should be an * odd number between 0 and 100. * @param b * The second parameter. * @return The result of the foo operation, usually within 0 and 1000. */ int foo( int a, int b ) ; } |
3 注释规范
-
编码中除私有的成员变量或方法外,都要求加上javadoc风格的注释,下述所有注释规范是强制性的,因为公有和保护的成员或方法上注释用来生成API文档。
3.1 类型注释
/** * <p>说明性文字,可以使用Html标签来进行排版。</p> * <p>不同段落间用p标签来分隔。</p> * * @author作者 */ |
3.2 方法注释
/** * <p>说明性文字,可以使用Html标签来进行排版。</p> * @param groupName 组名称 * @param key 键 * @return值 */ public Object get( String groupName, Object key ) ; |
3.3 常量注释
/** * 每次从数据库取数据数 */ publicstaticfinalintDATA_MAX = 1000 ; |
4 公共API设计规范
-
公共API的命名尽量少使用技术术语,例如:一个打印作业提交的类应该是Printer,而不是PrinterQueue。因为该场景的用户关心的是提交打印作业,而不关心其内部是否是一个队列实现。
5 惯例及约定
5.1 服务类的命名约定
-
要使用如下的命名方式对Service类进行命名:项目前缀+类名+Service后缀
例如:平台的User服务类名称应该为:PlatformUserService
分析平台的查询对象服务类应该为:AnalysisMetadataService
-
在使用spring管理Service类时,bean的名称应该为类名的首字母小写(即类名的camelCasing风格拼写)
例如:PlatformUserService的bean名称应该是platformUserSerivce
AnalysisMetadataService的bean名称应该是analysisMetadataService
-
要将服务类放在service包下,如平台的服务类应该在data.platform.service包下。
5.2 SpringMVC中Controller类的命名约定
-
要使用如下的命名策略来为Controller类进行命名,项目前缀+类名+Controller
例如:平台User的控制器类应该是:PlatformUserController
分析平台的查询对象服务类应该是:AnalysisMetadataController
-
在使用spring管理Controller类时,bean的名称应该为类名的首字母小写(即类名的camelCasing风格拼写)
例如:PlatformUserController的bean名称应该是platformUserController
AnalysisMetadataController的bean名称应该是analysisMetadataController
-
要将服务类放在controller包下,如平台的服务类应该在data.platform.controller包下。
5.3数据库设计约定
-
表命名规则:应用名_模块名_表名. 客服系统的表命名CC_表名
-
表主键命名:主键统一使用id命名
相关推荐
《Java技术规范》详细解读 Java技术规范是熙菱信息技术有限公司软件工程事业部对于所有在建软件项目和研发中的软件产品的统一指导准则,旨在提升代码质量和可维护性。本文将深入解析其中的标识符命名规范,这是编写...
【Java技术规范详解】 在熙菱信息技术有限公司的软件工程事业部,Java技术规范是软件开发过程中的重要指导原则。这份规范自发布之日起,适用于所有在建的软件项目和研发中的软件产品。规范通过“要”、“考虑”、...
JAVA JS技术规范的描述,规范开发人员的开发习惯
阿里巴巴为此发布了一款JAVA技术规范检查插件,旨在帮助开发者在编码过程中实时检查代码是否符合企业内部的编码标准。这款插件支持两种常用的集成开发环境(IDE)——Eclipse和IntelliJ IDEA,使得开发人员可以在...
JAVA开发技术规范 JAVA是一种广泛应用的编程语言,为了确保代码的可读性、可维护性和可扩展性,需要制定统一的编程规范。本文档旨在提供一系列的编程规约,涵盖命名规约、编程风格、代码组织等方面。 一、命名...
JCP(Java Community Process)作为一个开放性的国际组织,主要由Java开发者和被授权方组成,其主要职责在于发展与更新Java技术规范、参考实现(RI)和技术兼容包(TCK)。这为Java技术的发展提供了稳定的基础,并...
《Java核心技术系列:Java虚拟机规范(Java SE 8版)》由Oracle官方发布,Java虚拟机技术创建人撰写,国内资深Java技术专家翻译。书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和...
华为技术有限公司的企业技术规范DKBA1040-2001.12针对Java语言编程制定了一系列的规则和建议,以确保代码的质量和一致性。 规范的范围覆盖了以下几个方面: 1. **排版规范**: - 程序块的缩进要求使用4个空格,以...
4. Java平台的标准化和社区进程:Java社区进程(JCP)是一个开放的、透明的流程,用于发展和更新Java技术规范、参考实现和兼容性测试套件。它允许企业、开发者社区和软件供应商参与Java技术的未来发展方向。 5. ...
Java语言规范和Java虚拟机规范是Java开发人员深入理解Java平台核心技术的重要参考资料。这两部分规范分别定义了Java编程语言的语法、语义以及Java虚拟机(JVM)的行为,为开发者提供了准确的指导,确保代码的正确性...
Sun公司(现在是Oracle公司的一部分)是Java技术的主要开发者,也是Java虚拟机规范的主要贡献者。JVM规范定义了JVM的结构、执行模型、内存模型以及与平台无关的规范,使得任何遵守这个规范的虚拟机都能运行Java程序...
Java技术规范(TheJava®Language Specification)是Java编程语言的官方文档,它详细描述了Java语言的语法、语义、类型系统、结构等各个方面,确保Java程序的可移植性、安全性和一致性。Java SE 8版是该技术规范的第...
《Java虚拟机规范(JavaSE7版)》中文版的发布,不仅促进了Java技术在中国的普及与深化,也为全球Java开发者提供了一个共同的语言和标准。它不仅是技术文档,更是连接过去与未来的桥梁,反映了Java生态系统的持续...
Java详细开发技术规范手册是为Java开发者提供的一份详尽的指南,旨在确保代码质量、可读性、可维护性和团队协作效率。手册通常涵盖了一系列关键主题,包括但不限于编码规范、设计模式、异常处理、注释规则、测试实践...
3. JCP(Java Community Process):JCP是管理Java技术规范、参考实现和TCK(技术兼容性工具包)的社区过程。JCP保证Java技术的持续发展,由JSR(Java Specification Request)来提出新的技术规范或对现有技术规范的...
### Google Java 编程规范(中文版)知识点详解 #### 1. 源文件基础 **1.1 文件名** - **规范说明**: 源文件应当以其包含的最顶层类名命名,并且文件扩展名为`.java`。例如,如果最顶层的类名为`MyClass`,那么...
本书由“java之父”Jame Gosling 以及... 本书侧重于java技术细节和内幕,全面,准确,详尽地介绍了java语言及其语法,论述了java编译器所要检查的语法和java运行模式的各个方面,同时还描述了java语言最重要的新特征。
JAVA编程规范.pdf 本文档提供了JAVA编程规范的详细说明,涵盖了类和方法的设计、编程原则、命名约定等方面的内容。 类和方法的设计 在设计类和方法时,需要遵守一些基本原则。首先,类应该具有强大的内聚力,即类...