设计规范(NCV6开发规范)_第1页
设计规范(NCV6开发规范)_第2页
设计规范(NCV6开发规范)_第3页
设计规范(NCV6开发规范)_第4页
设计规范(NCV6开发规范)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

客户logo用友

yonyou

NC6.X开发规范

客户logo用友

yonycxj

目录

1JAVA.....................................................................................................4

1.1命名约定....................................................................................4

1.1.1包(package)...................................................................................................................................4

1.1.2类和接口................................................................................5

1.1.3方法....................................................................................6

1.1.4变量.................................................................................................................................................7

1.1.5常量命名................................................................................8

1.1.6变量................................................................................................................................................8

1.1.79

1.2注释........................................................................................9

1.3代码书写规范...............................................................................10

1.3.1缩进换行等格式化约定...................................................................11

1.3.2文件^主释................................................................................13

1.3.3类/接口等的文档注释....................................................................14

1.3.4方法的姐注释.........................................................................14

1.3.5静态变量和成员变量文档注释.............................................................15

1.3.6其他算法类注释.........................................................................15

1.3.7一个典型的示例..........................................................................16

客户logo用友

yonycxj

1.4接口设计规范...............................................................................18

1.4.1名词描述:..........................................................................................................................................................18

1.4.2设计要求:...........................................................................................................................................................18

1.5编程要求...................................................................................23

2XML........................................................................................................25

3NC文件和目录...........................................26

3.1一给定...................................................................................28

3.1.1命名约定..............................................................................................................................................................28

3.1.2属件..............................................................................................................................................................28

3.1.3多语资源..............................................................................................................................................................28

客户log。用友

yonycxj

>产品开发中的类不允许放在缺省包下

>产品模块对外定义的接口定义包:nc.pubitf.V模决名>.XX

>服务的实现类ncimpl.<模决名>.xx

>产品模块内部的接口定义放在nc.itf.<模决名,xx

>产品模块对外定义的接口实现包:nc.pubimpl.<模次名〉.xx

>后台业务类代码nc.bs.v模块名>.xx

>值对象命名:nc.vo.〈模次名).xx

>UI层命名:nc.ui.<崖芯名>.xx

举例:

nc.itf.uap.pf;

nc.vo.uap.pf;

nc.impl.uap.pf;

nc.pubitf.uap.pf;

nc.pubimpl.uap.pf,

nc.uiuap.sm;nc.vo.uap.sm

1.1.2类和接口

类和接口建议以名词进行命名,命名需要具有一定的意义,并且尽量的避免使用缩写,除非缩写得到广泛

的采用。进一步的约定如下:

客户logo用友

yonycxj

>采用有问题域中的单词或单词组合,每个单词的首字母大写,其余字母小写,一些特殊单词如URL,

HTML建议采用Uri,Html的形式

>接口的第一个字符采用工

>对接口的默认实现类命名方式为接口名称去掉L加Impl

>产品业务的内部逻辑实现类,以B0结尾

>数据访问的类以DAO或者DMO结尾

>测试用例以Test结尾

>对与继承Valueobject对象的类,以V。结尾

示例:

nc.itf.uap.pf.IPFBillltfDef

nc.ui.uap.pf.ActivityFigure

nc.vo.uap.pf.ActivityVO

nc.bs.uap.pf.WorkflowDAO

nc.test.uap.pf.FlowForkTest

1.13方法

命名多数为动词结构

>采用问题域中的单词或单词组合。第一个单词采用小写,后续的每个单词采用首字母大写,其余小写,

没有特别理由不用下划线作为分隔符,一些特殊单词如URL,HTML建议采用Uri,Html的形式

客户logo用友

yonycxj

>在Java中对属性方法命名遵循JavaBean的标准:

1)getter方法:get+属性名,对boolean型采用is-属性名,有些特定的属性名用has,can代替

is可能更好

2)setter方法:set+属性名

示例:

StringgetName();

stringisStopped();

voidconnectQ;

1.1.4变量

变量的命名包括实例变量,静态变量,函数参数的命名:

>避免在命名中采用数字,除非命名意义明确,程序更加清晰,对实例变量的命名中不应该有数字

>变量名称是名词意义

>采用问题域中的的单词或单词组合。第一个单词全部小写,后续的每个单词采用首字母大写,其余小

>命名尽量简短,不要超过16个字符

>除了生命周期很短的临时变量外,避免采用单字符作为变量名,实例变量的命名不要用单字符。常用

的单字符变量如整型用i、j、k、m、n字符型用c、d、e,坐标用x、y、z

示例:

客户logo用友

yonycxj

privateStringname;

intx;

privateJButtonbtnAdd;

1.1.5常量命名

使用常量取代对一些常值的引用,程序更易维护,常量命名约定如下:

>所有的字符都必须大写。采用有意义的单词组合表达,单词与单词之间以"/下划线隔开。

>命名尽量简短,不要超过16个字符

示例:

publicfinalintMAX_SIZE=120;

publicfinalintMAX_WIDTH=100;

publicfinalStringPROPERTY_NAME="menu";

1.1.6范型变量

范型中的变量我们规定只允许用一个字符进行表单,常用的字符:

>T:表示单一的范型类型

>K,V:表示Key,Value对应的范型类型

>E:表示一种与声明类是聚合关系的泛型类型

客户logo用友

yonycxj

1.1.7注解

以名词进行命名,命名需要具有一定的意义,并且尽量的避免使用缩写,除非缩写得到广泛的采用。进一

步的约定如下:

>采用有问题中的单词或单词组合,每个单词的首字国大写,其余宇国小写,一些特殊单词如URL,HTML

建议采用Uri,Html的形式

>注解所在的包建议放在nc.vo包中

1.2注释

注释目的是为了提高代码的可维护性和可读性,通过注释把代码的目的,逻辑实现等进行描述:

>注释要简单明了,只要提供能够明确理解程序所必要的信息就可以了。如果注释太复杂可能程序需要

重构

>对于一般的getter,setter方法不用注释

>不要在注释中使用格式修饰符,如一大串的*或者-进行字符化的格式修饰

>生成开发文档的需要用中文编写

注释分为文档注释,块注释,和单行注释,根据情况不同,选择不同的注释类型。

注释类型说明示例

文档注释>Javadoc工具用它javadoc

>作用于类、接口、成员方法、成员变量、静态*AppServeris...

字段、静态方法、常量V

>可以通过缩进、换行,和一些格式标签publicclassAppServer{...

客户logo用友

yonycxj

块注释>一般用于描述复杂的算法或者数据结构/*-

>一般用于私有方法或者方法内部的实现*Hereisablock

>可以通过缩进、换行进行格式化★

>如果注释只是简短的注释,不要使用块注释,*one

除非注释是在行中*two

V

单行注释>用于进行一行的简短注释//dosomething

>用于行头,或者行尾进行注释

1.3代码书写规范

代码书写规范用于规范java代码的各个部分的书写的格式和约定,按照规范进行代码组织,使代码风格保

持一致。

一个典型的代码一般按照如下结构组织:

文件注释

包申明(package)

包引入(import)

客户logo用友

yonycxj

类/接口/注解/枚举声明

静态变量文档注释和静态变量

成员变量文档注释和成员变量

构造函数文档注释和构造函数声明及定义

方法注释和方法声明及定义

各个部分之间一般空一行,进行分隔。除此之外,方法,构造函数,私有变量可能还有块注释、行注释进

行C

1.3.1缩进换行等格式化约定

>无论是注释还是代码,单行长度推荐在80个字符以下,不要超过120个字符

>如果超过需要换行,换行的位置一般在逗号后,操作符前,换行位值最好不会造成段落的分裂,换行后新

行最上一行的该段落的位置保持一致,或者缩进两个字符

>缩进的单位是四空格字符,不要用Tab字符表示缩进

例子:

implClass=((Constantlnstantiator)getRawInstantiatorQ)

客户logo用友

yonycxj

.getConstant().getClass();

var=submit(invoice_pkl,invoice_pk2/invoice_pk3,

otherltems(invoice_pk3,invoice_pk5,

invoice_pk6));

longNamel=longName2*(longName3+longName4-longName5)

+4*Iongname6;//尽量保持段落同行

下面是不推荐的

longNamel=longName2*(longName3+longName4

-longName5)+4*Iongname6;//了段落分裂

>一个程序文件最好不要超过2000行

>每个方法尽量代码行数尽量不要超过100行(有效代码行,不包括注释),但必须保证逻辑的完整性

>避免过多的参数列表,尽量控制在5个以内,若需要传递多个参数时,当使用一个容纳这些参数的对象进

行传递,以提高程序的可读性和可扩展性

>文档注释与其注释部分不能有空行,例如方法的文档注释放在方法的紧前面,不能空一行

>远始块符号"{"和他的起始部分同行,结束块符号"}"与其其实部分行对齐,如

try(

in=getInputStream;cfs[O]);

mxvs.setId(cfs[0].toString());

mxvs.parse(module,in);

}catch(Exceptione){

客户logo用友

yonycxj

logger.error(String.format(Messages.gpmErr,cfs[O].getName(),md

,getName()));

}finally{

lOUtil.close(in);

)

>除了++,「人这些一元操作符外,操作符和操作数之间具有一个空格

>括号之前之后都不能有空格

>数组的申明采用数据类型口+变量名>方式如:

charQbuffer;〃好

charbuffer。;/"F推荐

1.3.2文件注释

文件注释包括信息一般为,版权信息,文件的修改记录如:

*Copyright(c)1998-2010用友软件股有限公司.

*History:

hgy2004-10-02修复bugncdpOOl

客户logo用友

yonycxj

*linmin2005-10-02修复bugncdpOOlOOO

7

1.33类/接口等的文档注释

类/接口/注解/枚举的文档描述,一般比较详细。按照常用的说明顺序排列,主要包括

>通常都需要发布为API文档,因此通常采用文档注释

>类的主要说明,以。或.结束

>类设计的目标,完成什么样的功能

><Strong>主要的类使用</Strong>如何使用该类,包括环境要求,如是否线程安全,并发性要求,以及使用约束

>〈Strong〉已知的BUG〈/Strong〉

>描述类的修改历史:〈Strong〉修改人+日期+简单说明〈/Strong〉

>©author作者、(Aversion版本,@see参照,@since开始版本等信息如:

>版本就以当时开发的NC产品的应用版本号为准

13.4方法的文档注释

描述因数的功能,对成员方法,静态方法一般采用文档描述,特别是公开的方法。注释可以很详细,为了

可读性强也可包含格式控制。

方法注释一般包括:

>方法的主要说明,以。或.结束

客户logo用友

yonycxj

>描述方法完成什么样的功能,方法的目标,用该方法的原因

>描述方法的使用方法,包括使用的环境要求,如前置条件,后置条件和并发性要求

>描述已知的bug

>描述方法的修改历史:〈Strong〉修改人+日期+简单说明〈/Strong〉(〈修改人+日期+简单说明〉)

>@paramcelementstobeinsertedintothislist.(参数说明)

>@return<tt>true</tt>ifthislistchangedasaresultofthecall.(返回值说明)

>@throwsNullPointerExceptionifthespecifiedCollectionisnull.(异常说明)

>@see如果重载方法必须参考父类的方法

>Eclips下采用Alt+Shift+J生成Javadoc说明方法的放回值((@return)

13.5静态变量和成员变量文档注释

成员变量、类静态变量采用文档注释,对成员变量的注释通常包括:

>变量的意义

>变量的合法值域

>对并发访问的限制

13.6其他算法类注释

算法描述指在实现级别的描述注释,如在方法内的注释,对类实现的注释,这样使得程序更加易懂,方便程序

算法的修改和BUG的修复。一般采用块/行注释,对于简短的描述采用行注释,不要用文档注释。注释的主要

内容包括:

>某些局部变量的意义和用途

>复杂的控制结构的注释,如循环,分枝,条件表达式。说明控制所要达到的目标

客户logo用友

yonycxj

复杂的代码段的描述,说明代码完成的功能,以及为什么这样做

1.3.7一个典型的示例

*Copyright(c)1994-2010UFIDA

*文件注释….

*/

packatenc.bs.framework.core;

import.URL;

*类的文档描述.

*

*©version5.6

*@authorhgy

*/

publicclassNetlnputStreamextendsInputStream{

〃类的算法注释V

客户logo用友

yonycxj

/**静态变量文档注释*/

publicstaticintBUFFER_SIZE=1024;

/**成员变量注释*/

publicInputstreamwrapper;

/**成员变量注释*/

protectedintrefCount;

*方法文档注释

*/

publicintread(){

〃单行注释,用于简单描述算法.

)

*方法文档注释

*/

publicvoidcose(){

客户logo用友

yonycxj

*负责的算法描述

*/

}

)

1.4接口设计规范

1.4.1名词描述:

>接口设计:指将本业务模块为其他业务提供的服务方法和进行远程调用的方法提取为接口的设计方式;

>接口:指上述设计所涉及的类,包括接口类及接口方法中所使用的业务对象(如VO)和业务异常。

不包括接口类的具体实现类;

>代码设计:指代码即为设计文档,要求其注释可生成JavaDoc文件;

>设计阶段:分为总体设计、详细设计;

1.4.2设计要求:

>设计工具:采用Eclipse直接进行代码设计;

>文档格式:JavaDoc文档,文档中包含接口中使用的接口类、业务对象和业务异常的描述;

>JavaDoc注释要求:

客户logo用友

yonycxj

符合标准JavaDoc文档所要求的输写规范具体写发详见JDKDOC帮助文件。对具体对象要求如下:

i.接口类:

1.类注释:类注释应该在import语句的后面在类声明的前面;

*(接口类简要描绘,必须以句号为结束).

*<p>

*<strong〉提供者:</strong>(提供业务组)

*<p>

*〈strong〉使用者:</strong〉(使用业务组,若分方法描述可省略此项)

*<p>

*〈strong〉设计状态:〈/strong〉(指出接口类设计阶段:总体、详细)

*<p>

*©version(接口版本)

*@author(接口类总设计负责人)

*/

2.方法注释:方法注释要紧靠方法的前面;

(接口方法简要描述,必须以句号为结束).

<P>

〈strong〉调用模块:</strong>

客户logo用友

yonycxj

*(明确指出本接口适用范围:公共、私有或具体应用业务模块)

*<p>

*〈strong〉最后修改人:</st「ong>

*<p>

*〈strong〉最后修改日前:〈/strong〉

*<p>

*〈strong〉用例描述:〈/strong〉

*<p>

*@param(参数用途描述)

*@return(返回值描述)

*@throws(异常描述)

*@since(开始使用的NC版本)

*@see(关联类)

*/

ii.业务对象类:

1.类注释

*(业务对象类简要描绘,必须以句号为结束).

<P>

*〈strong〉拥有者:〈/strong〉(拥有业务对象的业务组)

<P>

客户logo用友

yonycxj

*〈strong〉设计状态:〈/strong〉(指出接口类设计阶段:总体、详细)

*(Aversion(业务对象版本)

*@author(作者/最后修改人)

*©since(开始使用的NC版本)

*/

2.get方法注释

*(属性简要描述,必须以句号为结束).

*@return

*/

3.set方法注释

*(属性简要描述,必须以句号为结束).

*@param(参数用途描述)

V

iii.业务异常类:

1.类注释

*(业务异常类简要描绘,必须以句号为结束).

客户logo用友

yonycxj

*〈strong〉拥有者:〈/strong〉(拥有异常的业务组)

*<p>

*〈strong>设计状态:〈/strong〉(指出接口类设计阶段:总体、详细)

*<p>

*©version(业务异常类版本)

*@author(作者/最后修改人)

*@since(开始使用的NC版本)

*@see(关联类)

7

2.构造方法注释

*(异常构造的简要描述,必须以句号为结束).

*/

b)不同设计阶段要求:

i.总体设计:明确描述接口类名称和用途,接口方法名称和用途;

ii.详细设计:明确描述接口方法参数和返回值,明确描述方;去使用的业务对象和异常,明确描述接

口方法用例;

二、应用实例

a)接口类:nc.itf.uap.test.ITestBService

b)业务对象类:nc.vo.u叩.test.BusinessVO

c)业务异常类:nc.bs.uap.test.BusinessException

客户logo用友

yonycxj

d)生成的JavaDoc文件

1.5编程要求

这节从编程的细节进行描述一些非格式化的一些代码规范:

>一个方法所完成的功能要单一,不同的功能需要重构封装为不同的方法,或者新的类

>局部变量在使用时刻声明,尽可能缩小变量的作用域,这样变量的可见范围和生存期也都会尽可能地

>局部变量/静态变量在声明时同时初始化,特别是对丁静态变量,初始化一定要简单,如果静态变量初

始化复杂,特别是还依赖其他的类的静态变量的情况时,应该竭力避免,如果不能避免,应该引入静

态方法进行初始化,尽量少用静态段进行初始化

>避免变量的定义与上一层作用域的变量同名

>尽可能的处理异常或转换异常,不要一味的包装异常

>不允许调用System.gc

>如果对象在某个特定范围内必须被清理(而不是作为垃圾被回收),请使用带有finally子句的try块,

在finally子句中进行清理

>把一些逻辑紧密相关的类组织在一起时可以考虑匿名类,通过匿名类访问被外部类保护的成员,具有

简单安全的优点,例如按钮的事件处理监听器,推荐使用内部类

>对成员变量的访问最好通过getter/setter方法,这样能够保证访问的合法性,并使代码调整更容易些

>使用java标准库提供的容器。精通他们的用法,将极大地提高工作效率。优先选择ArrayList来处理

顺序结构,选择HashSet来处理集合,选择HashM叩来处理关联数组,选择LinkedList来处理堆

栈和队列,它对顺序访问进行了优化,向List中间插入与删除的开销小,但随机访问则较慢。

客户logo用友

yonycxj

>使用java标准库提供的容器类,方法的返回值,参数,成员变量的声明,都应该使用List、Set和

M叩进行声明,这样代码具有更大的灵活性和可调整性

>使用这些标准的容器时,必须使用范型

>数组是一种效率最高的存储和随机访问对象引用序列的方式,但是当创建了一个数组对象,数组的大

小就被固定了,如果在空间不足时再创建新的数组进行复制,这样效率就比ArrayList开销大了。所

以必须明确使用场景

>尽量使用"private"、"protected”关键字。一旦你把库的特征(包括类、方法、字段)标记为public,

你就再也不可能去掉他们。在这种方式下,实现的变动对派生类造成的影响最小,在公理多线程问题

的时候,保持私有性尤其重要,因为只有Private的字段才会受到保护,而不用担心被未受同步控制

的使用所破坏。

>采用类而不是对象引用静态变量和静态方法

>UFDobule常量必须使用UFDouble.ZERO,UFDouble.ONE

>使用UFBoolean必须采用

>UFBoolean.valueof(true|false|y|n|Y|N),的形式进行构造,常量必须用UFBoolean.TRUE,

UFBoolean.FALSE

>禁止后台业务代码使用如下代码

try(

somethingO

}catch(Exceptionex){

)

客户logo用友

yonycxj

newExceptionQ

>编写通用性的类,特别是值时象的类时,请遵守标准形式。包括定义equals。、hasCode。、toString()x

实现Cloneable接口和clone。方法,实现Comparable和Serialiable接口

>对于设计期间不需要继承的类,尽量使用final,如一些模板方法模式中的模板方法,算法体是不允许

覆盖的,因此一般都用final进行修饰

>在与常数作比较时常数放在比较表达式的前面如

if('simpleCase'.equals(obj)){

if(null==obj){

>return语句中,不要有复杂的运算。

>switch语句,需要一个缺省的分支

・XML

这里所说的XML文件包括以xml作为后缀,也包括其他非xml后缀,但是要经过xmlparser等工具分析

的文件。

>对于一般的XML文件,我们以xml作为文件后缀,schema文件以xsd作为后缀

>XML文件内容中不要有Tab字符

客户logo用友

yonycxj

>如果xml文件中具有中文,使用utf-8进行文件编码,并在文件头中包括:

<?xmlversion="1.0"endoding="UTF-8"?>

NC文件和目录

本节对NC产品对文件和目录的结构进行描述,并进行命名和格式上的约定。下面表格描述了NC的目录结构

和各个目录的意义:

客户logo用友

yonycxj

>ierp,ierp/bin:共用的全局配置文件目3亡|NC_UAP_M0DULES

>webapps:核心web应用部署目录王」ant

>hotwebs:扩展web应用目录

>ejb:NC中间件ejb包目录田匕|bin

>ejbXMLs:NC中间件ejb描述文件目

录+aconf

>scripts:数据库脚本存放目录DBTrans

>nclogs:系统日志存放目录

>externaljib,framework,middlev/are客户Qejb

化基础技术平台提供的一些jar包,

平台维护和提供的类库,不允许第三方QejbXMLs

调整

>langlib:多语jar包±Qexternal

>modules:各产品模块的部署目录

■〈模块名〉:某个模块的目录,下面以M王区Iframewor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论