文档库 最新最全的文档下载
当前位置:文档库 › WCF编码规范_中文版

WCF编码规范_中文版

WCF编码规范_中文版
WCF编码规范_中文版

WCF编码规范指南与最佳实践

作者:Juval Lowy

译者:Frank Xu Lei

目录

译者序 (3)

序言 (4)

通用设计规范 (5)

设计要点 (5)

服务契约 (6)

数据契约 (7)

实例管理 (7)

操作与调用 (8)

错误 (9)

事务 (10)

并发管理 (11)

队列服务 (12)

安全 (13)

服务总线 (13)

资源 (14)

译者序

《WCF4.0新特性体验》之后,新出一个系列《WCF服务编程设计规范》。这个系列主要关注的是如何设计WCF服务,以及WCF编码规范。这里我会翻译整理一些WCF服务设计相关的资料,分享给大家,并提供英文原版的下载。

【1】序言:

这个系列应该实用性比较强,对于大多数使用到WCF的技术人员或者公司来说,都是比较重要的内容,我们需要一套完整的规范来指导服务的设计和编码。这可以作为大家学习WCF一个规范参考,另外如果公司制定WCF相关的编码和服务设计规范的时候,可以参考一下。我会在这个系列结束的时候,放出中文原版。整理成PDF或者Word。相信对于国内的IT公司也有帮助。

【2】资料简介:

这个文档资料的作者就是Juval Lowy ,的作者。中文名字为《WCF服务编程》。第一版和第二版后面都附录了这些内容,但是,目前这个版本是最新版本,更新时间是2010年2月份。相信会在第三版里附录进来。目前作者的博客提供了下载。大家也可以自己下载。我这里给出一个PDF的版本。可以在本文的最下面直接下载。

?英文:《IDesign WCF Coding Standard 》,Guidelines and Best Practices,Author: Juval Lowy

?中文:《IDesign WCF编码规范》,指南与最佳实践,作者:Juval Lowy

?英文:《WCF Best Practice》作者是Brian Noyes,Juval Lowy 的同事。

?中文:《WCF最佳实践》。今天内容主要包含,作者介绍,资料的目录结构,然后是翻译的前三部:服务定义、异常处理和安全。

【3】资源下载:

欢迎访问老徐的博客,下载,英文、中文、中英文对照版资料。

老徐的博客:https://www.wendangku.net/doc/3d1762380.html,/frank_xl/

老徐的网站:https://www.wendangku.net/doc/3d1762380.html,

【4】版权声明:

1.我个人的翻译和整理没有任何商业目的。源于分享技术。

2.《IDesign WCF Coding Standard 》的英文版权属于IDesign 。如有出版、印

刷等商业需求请索取授权。

3.任何对于中文翻译版本的引用和转载,请注明出处和译者。

序言

对于一次成功的产品交付来说,完整编码规范至关重要。这个规范可以帮助强化一些通用的最佳实践准则,并避免犯错,方便整个团队理解这些知识。通常,编码规范都是相当的繁琐,动辄上百页,内容详细叙述每个编码规则的基本原理。虽然这比没有规范要好的多,但是通常开发人员难以理解和掌握。相反,《WCF编码规范》只有10多页,并且详细介绍“是什么”和“为什么”。我相信要完全理解每个编码规则的精髓并恰当地应用这些规则,需要阅读大量的书籍和多年的工作经验。当有新人进入团队时,你可以快速地告诉他或她应该“先看看这个规范”。因为,完全理解这些规范需要时间和今年感言,在此之前,我们就应该遵守它。这里涵盖了一些常用的规则、缺陷、指南和建议。这里会使用在《WCF Master Class》和《Programming WCF Services》(精通WCF课程和WCF服务编程)里介绍的最佳实践和Helper Class。

Juval Lowy

通用设计规范

1.所有的服务必须遵守这些原则:

a)服务是安全的。

b)服务操作保证系统在一直的状态。

c)服务是线程安全的并且可以被并发的客户端访问。

d)服务是可靠的。

e)服务是健壮的。

2.这些原则不是必须的。

a)服务是可互操作的

b)服务是可以伸缩的

c)服务是可用的

d)服务是可以相应的

e)服务是遵守规则的,不能长时间阻塞客户端进程。

设计要点

1.服务类应该定义在类库而不是exe宿主里。

2.不要给服务类提供参数化的构造函数,除非其是singleton单例模式,并且确定宿主。

3.在相关的绑定里启用可靠性。

4.为契约定义有意义的命名空间。暴露的外部服务,使用公司的URL或URN,并附上年月日

等支持版本化。

例如:

[ServiceContract(Namespace = "https://www.wendangku.net/doc/3d1762380.html,/2009/06")]

interface IMyContract

{...}

对于企业内部服务,使用唯一的有意义的名字,比如MyApplication。

For example:

例如:

[ServiceContract(Namespace = "MyApplication")]

interface IMyContract

{...}

5.对于企业内部应用系统,当WAS不可用的时候,推荐自托管self-hosting而不是IIS。

6.不要混用指定绑定和默认绑定。要么全部明确指定绑定,要么只使用默认绑定。

7.不要混用指定行为和默认行为,要么全部明确执行行为,要么使用默认行为。

8.在客户端的配置文件里,定义终结点的名字name.

9.不要使用SvcUtil工具或者Visual Studio 2010去生成配置文件。

10.当使用Visual Studio 2010生成客户端代理的时候,记得释放代理。

11.不要复制代理代码。如果两个或多个客户端使用了相同的契约,把代理分解到独立的

类库里。

12.通常要关闭或者销毁(close或dispose proxy)代理实例。(客户端代理包含网络连接等珍贵

资源,继续释放)

13.当使用服务发现机制的时候,推荐动态地址。(动态定位服务地址是W CF服务发现的优势)

14.当使用服务发现机制的时候,记得暴露支持TCP元数据交换的终结点。(这里指的是Ad-Hoc

模式,适用于企业局域网,提高数据交换速度)

15.当使用服务发现机制的时候,避免使用不确定的基数(WCF4.0里,查找终结点的个数,这里

明确数目,FindCriteria.MaxResults = 1)

服务契约

1.把ServiceContract属性标记到契约接口上,而不是服务类上

//Avoid:避免

[ServiceContract]

class MyService

{

[OperationContract]

public void MyMethod()

{...}

}

//Correct:正确

[ServiceContract]

interface IMyContract

{

[OperationContract]

void MyMethod();

}

class MyService : IMyContract

{

public void MyMethod()

{...}

}

2.服务契约名称以I开头:

[ServiceContract]

interface I MyContract

{...}

3.避免定义与属性类似的操作:

//Avoid:

[ServiceContract]

interface IMyContract

{

[OperationContract]

string GetName();

[OperationContract]

void SetName(string name);

}

4.避免契约里只包含一个成员

5.每个契约里尽量保证3-5个成员

6.每个服务契约里成员不要超过20个。12个也许久应该就是极限

数据契约

1.避免使用推测性的数据契约。明确使用DataContract属性定义数据契约。

2.只在属性或者只读的成员上使用DataMember属性

3.自己的类型上明确使用XML序列化标记

4.避免使用消息契约

5.当使用Order属性的时候,对于类层次相同的所有成员赋相同的值

6.数据契约支持IExtensibleDataObject。使用明确地实现接口。

7.避免在ServiceBehavior和CallbackBehavior属性里把IgnoreExtensionDataObject设置为true。保

持默认的false

8.不要使用委托和事件作为数据成员

9.不要传递.NET-specific类型,比如Type,作为操作参数。

10.不要接受或者返回https://www.wendangku.net/doc/3d1762380.html, DataSets和DataTables (或它们的类型安全的子类)。返回一个中

立的数据形式,比如数组。

11.不要产生泛型类型参数的哈希值,使用一个易懂的类型名称作为替代。

实例管理

1.当考虑到可伸缩性的时候,使用Per_Call模式,单调模式。

2.如果在契约上设置了SessionMode.NotAllowed,通常会把服务实例模式设置为

InstanceContextMode.PerCall

3.不要在一个服务里把会话契约和非会话契约混用。

4.避免使用单例模式,除非理所当然地应该使用单例模式。

5.尽量在会话服务里使用顺序传递。

6.避免在会话服务里停止服务实例

7.避免分布操作(比如有先后顺序的操作。)

8.在持久化服务里,始终指定一个完成操作。

操作与调用

1.不要把单向调用作为异步调用

2.不要把单向调用作为并发调用

3.单向操作也应该返回异常

4.即使当单向调用的时候,也要启用可靠性。单向调用不必使用有序传递。

5.避免在会话服务里使用单向调用。如果用到,作为结束操作。

[ServiceContract(SessionMode = SessionMode.Required)]

interface IMyContract

{

[OperationContract]

void MyMethod1();

[OperationContract(IsOneWay = true,IsInitiating = false,IsTerminating =true)] void MyMethod2();

}

6.回调操作最好使用服务契约的名字加后缀Callback

interface IMyContractCallback

{...}

[ServiceContract(CallbackContract = typeof(IMyContractCallback))]

interface IMyContract

{...}

7.回调操作标记会单向操作

8.只在回调的时候使用回调契约。

9.避免在回调契约上混用常规回调和事件

10.事件操作应该设计如下:

a) void return type

避免返回类型

b) No out-parameters

没有out参数

c) Marked as one-way operations

11.标记为单向操作

12.避免在事件管理中使用原始回调契约,推荐使用发布-订阅框架

13.为回调提供清晰的安装(setup)和拆卸( teardown)方法

[ServiceContract(CallbackContract = typeof(IMyContractCallback))]

interface IMyContract

{

[OperationContract]

void DoSomething();

[OperationContract]

void Connect();

[OperationContract]

void Disconnect();

}

interface IMyContractCallback

{...}

14.使用类型安全的DuplexClientBase代替DuplexClientBase.

15.使用类型安全的DuplexChannelFactory代替DuplexChannelFactory.

16.当调试或在企业局域网部署环境里使用WSDualHttpBinding时,使用

CallbackBaseAddressBehavior,并把CallbackPort设置0:[CallbackBaseAddressBehavior(CallbackPort = 0)]

class MyClient : IMyContractCallback

{...}

错误

1.不要异常以后使用代理实例,尽管你捕获了异常。

2.避免错误契约,让WCF来包装错误

3.不要在异常后还使用回调通道,尽管你捕获了异常,因为通道可能出于错误状态。

4.在异常类上使用FaultContract属性,而不是可序列化类型上:

//Avoid:避免

[OperationContract]

[FaultContract(typeof(double))]

double Divide(double number1,double number2);

//Correct:正确

[OperationContract]

[FaultContract(typeof(DivideByZeroException))]

double Divide(double number1,double number2);

5.避免冗长的处理,比如登入IErrorHandler.ProvideFault().

6.对于服务类和回调类,在调试时,设置IncludeExceptionDetailInFaults为true,配置文件或者

编程都可以:

public class DebugHelper

{

public const bool IncludeExceptionDetailInFaults =

#if DEBUG

true;

#else

false;

#endif

}

[ServiceBehavior(IncludeExceptionDetailInFaults =

DebugHelper.IncludeExceptionDetailInFaults)]

class MyService : IMyContract

{...}

7.在发布构建版本里,不要返回不可知的异常做为错误,除非是在调试场景里。

8.当提升异常为错误契约,以及自动错误日志时,都可以考虑在服务上使用

ErrorHandlerBehavior属性:

[ErrorHandlerBehavior]

class MyService : IMyContract

{...}

9.当提升异常为错误契约,以及自动错误日志时,考虑在回调客户端上使用

CallbackErrorHandlerBehaviorAttribute:

[CallbackErrorHandlerBehavior(typeof(MyClient))]

class MyClient : IMyContractCallback

{

public void OnCallabck()

{...}

}

事务

1.不要直接管理事务

2.在契约而不是服务类上标注TransactionFlow属性,

3.不要在服务的构造函数里执行事务操作

4.使用本书中的术语,为客户端或客户端/服务端事务模式配置服务。避免使用None或服务事

务模式。

5.使用本书中的术语,为服务或服务/回调事务模式配置回调。避免使用None或回调事务模式。

6.当使用客户端/服务或服务/回调模式,通过BindingRequirement属性约束绑定传播事务

7.在客户端,始终捕获None或服务事务里抛出的所有异常。

8.即使使用事务的时候,也要启用可靠性和顺序传递

9.在服务操作里,不要捕获异常并终止事务

//Avoid:避免

[OperationBehavior(TransactionScopeRequired = true)]

public void MyMethod()

{

try

{

...

}

catch

{

Transaction.Current.Rollback();

}

}

10.如果你在一个事务性操作里捕获了异常,始终直接重新抛出这个异常或者抛出另外一个异

11.保持事务简洁

12.使用IsolationLevel.Serializable默认的事物隔离级别

13.不要在事务内部调用一个单向操作

14.不要在一个事务内部调用一个非事务服务

15.不要在一个事务内访问非事务性资源(比如文件系统)

16.对于会话服务,避免因为会话关闭时的auto-complete就把会话边界和事务边界等价。

17.尽量使用TransactionalBehavior属性去管理会话服务上的事务

[Serializable]

[TransactionalBehavior]

class MyService : IMyContract

{

public void MyMethod()

{...}

}

18.当使用会话或事务性的单例服务时,使用易失资源管理器去管理状态,并且避免显示地使

用状态编程或者在完整时依赖WCF实例钝化机制,

19.在持久性事务服务里,始终通过设置SaveStateInOperationTransaction 为true来把事务和传播

到存储系统中。

并发管理

1.对以下资源始终提供线程安全的访问

a) Service in-memory state with sessionful or singleton services

会话或者单例服务在内存中的状态

b) Client in-memory state during callbacks

回调期间客户端在内存中的状态

c) Shared resources

共享资源

d) Static variables

静态变量

2.默认情况推荐使用ConcurrencyMode.Single模式。它会启用事务性访问并提供线程安全,而

不会带来任何开销。

3.当操作在是单个会话模式或者单例模式时,请保证操作简短,以长时间免阻塞客户端。

4.当使用ConcurrencyMode.Multiple时,你必须启用事务autocompletion自动提交机制。

5.在单调服务上使用ConcurrencyMode.Multiple属性,允许并发调用,

6.使用ConcurrencyMode.Multiple的事务性单例服务必须把

ReleaseServiceInstanceOnTransactionComplete 设置为false

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,

ConcurrencyMode = ConcurrencyMode.Multiple, ReleaseServiceInstanceOnTransactionComplete = false)]

class MySingleton : IMyContract

{...}

7.不要在UI线程上托管服务,让UI程序只调用服务。

8.从不允许服务回调UI程序,除非回调使用了SynchronizationContext.Post().

9.当代理提供了异步和同步方法的时候,在同步方法上使用FaultContract

10.保持异步调用操作简短。不要把异步调用和冗长的操作混淆。

11.不要把事务和异步调用混用

队列服务

1.在客户端,在调用队列服务以前,始终检查队列是否可用(如果可以的话,也包括确认死

信队列)。使用QueuedServiceHelper.VerifyQueues()方法检查。

2.当托管队列服务的时候始终检查队列是否可用(ServiceHost会自动检测)

3.除了某些单独的场景,避免避免在同一个服务里同时使用队列和非队列服务

4.服务应该参与到回放事务中

5.当参与到回放事务里,避免队列服务里出现冗长的处理工作

6.避免使用绘画性队列服务

7.当使用单例队列服务时,使用易失资源管理器去管理单例状态

8.当使用单调队列服务时,明确设置服务和契约的单调和非回话属性

[ServiceContract(SessionMode = SessionMode.NotAllowed)]

interface IMyContract

{...}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

class MyService : IMyContract

{...}

始终禁止在单例队列服务模式下使用会话

[ServiceContract(SessionMode = SessionMode.NotAllowed)]

interface IMyContract

{...}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

class MyService : IMyContract

{...}

9.客户端应该在一个事务内部调用队列服务

10.在客户端,不要在成员变量里存储队列服务的代理

11.避免使用相对短的TimeToLive值,因为这会干扰队列服务的决策

12.避免非事务性队列

13.当使用一个应答队列时,让服务参与到一个回放事务中,并且在事务里,把应答消息装入

队列。

14.让应答服务参与到应答回放事务里

15.避免在应答操作里进行冗长的处理工作

16.对于MSMQ3.0,推荐使用应答服务来处理服务自身失败,而不是毒信队列

17.对于MSMQ4.0,除非对ReceiveErrorHandling.Move有高级处理,否则为毒信队列使用

ReceiveErrorHandling.Reject,避免使用ReceiveErrorHandling.Fault 和ReceiveErrorHandling.Drop

18.对于MSMQ4.0,考虑使用应答服务去处理服务回放错误

19.除非处理会话契约和服务,否则从不假定队列调用是有序的

20.避免多个服务终结点共享一个队列

21.避免使用接收上下文环境

安全

1.始终保护消息,并为消息提供安全性和完整性

2.在企业网内,只要你把保护级别设置为EncryptAndSign你可以使用传输安全,

3.在企业网内,避免使用impersonation,把impersonation 级别设置为

TokenImpersonationLevel.Identification

4.当使用impersonation时,让客户端使用TokenImpersonationLevel.Impersonation

5.使用声明式安全框架,并避免手动配置

6.从不在服务上直接设置PrincipalPermission属性

//Will always fail:

[PrincipalPermission(SecurityAction.Demand,Role = "...")]

public class MyService : IMyContract

{...}

7.避免在服务构造函数上,完成需要授权的工作

8.避免要求一个特定的用户,不管是否要求的角色

//Avoid:

[PrincipalPermission(SecurityAction.Demand,Name = "John")]

public void MyMethod()

{...}

9.不要在客户端回调操作里依赖基于角色的安全

10.对于Internet客户端,始终使用消息安全

11.运行客户端与服务端进行证书协商(默认)

12.为自定义客户端凭据使用https://www.wendangku.net/doc/3d1762380.html, providers

13.当开发自定义客户端凭据存储的时候,使用自定义A https://www.wendangku.net/doc/3d1762380.html, provider.

14.使用对等信任验证证书

服务总线

1.推荐使用TCP Relay绑定

2.让你的服务是可以被发现

3.使用分离事件

4.不要把缓存当做队列

5.对于缓存,避免原始的WCF消息以及使用强类型、结构化的BufferedServiceBusHost

BufferedServiceBusClient调用方法

6.使用消息安全

7.不要是有服务总线验证去做用户验证的工作

8.

9.争取匿名调用,并且让服务总线验证调用程序

资源

1 Programming WCF Services 3rd Edition

《WCF服务编程》第3版By Juval Lowy, O'Reilly 2010

2 The WCF Master Class

3 The Architect’s Master Class

4 The IDesign Serviceware Downloads

Java编程规范试题

姓名: ____________ 工号:_______________ 部门:____________ 成绩: 一. 判断题(共15题,每题2分,直接在括号内打“/或“X”) 1、任何时候都不要使接口可以序列化。x 2、相对独立的程序块之间、变量说明之后必须加空行。V 3、当程序需要释放对象的时候,应该手工调用fin alize 方法以释放对象。x 4、公司的规范要求注释率是20%以上,并且必须有助于对程序的阅读理解。x 5、为了程序更加简洁,我们应该尽量使用下面的方式来赋值: a = b = 1 。x 6、每个类都需要定义构建器。x 7、类名、方法名、属性名的命名,都应该使用意义完整的英文描述。V 8、main() 方法的定义是public static void main(String args[]) 。x 9、常量名应该使用全大写,英文单词之间用下划线或者-分隔开。并且,常量应该使用final static 修饰。x 10、公有方法参数名可以和属性名相同,但局部变量不能和属性名相同。V 11、一两行代码就能完成的功能没有必要编写方法实现。x 12、对于模块间接口方法的参数的合法性检查,调用者和被调用者都应该对参数进行合法性检查。 x 13、运行期异常使用RuntimeException的子类来表示,必须在方法声明上加throws子句。x非运行 期异常是从Exception继承而来的,不用在可能抛出异常的方法声明上加throws子句。x 14、使用Objectstream 的方法后,调用release(),释放对象。X 15、减小单个方法的复杂度,使用的if, while, for, switch 语句要在10个以内。V 二、单项选择题(共23题,每题2分) (c ) 1、排版时,代码缩进应该采用的方式是: (A)Tab缩进 (B)2个空格缩进

C语言编码规范

C语言编程规范 对于程序员来说,能工作的代码并不等于“好”的代码。“好”代码的指标很多,包括易读、易维护、易移植和可靠等。其中,可靠性对嵌入式系统非常重要,尤其是在那些对安全性要求很高的系统中,如飞行器、汽车和工业控制中。这些系统的特点是:只要工作稍有偏差,就有可能造成重大损失或者人员伤亡。一个不容易出错的系统,除了要有很好的硬件设计(如电磁兼容性),还要有很健壮或者说“安全”的程序。 然而,很少有程序员知道什么样的程序是安全的程序。很多程序只是表面上可以干活,还存在着大量的隐患。当然,这其中也有C语言自身的原因。因为C语言是一门难以掌握的语言,其灵活的编程方式和语法规则对于一个新手来说很可能会成为机关重重的陷阱。同时,C语言的定义还并不完全,即使是国际通用的C语言标准,也还存在着很多未完全定义的地方。要求所有的嵌入式程序员都成为C语言专家,避开所有可能带来危险的编程方式,是不现实的。最好的方法是有一个针对安全性的C语言编程规范,告诉程序员该如何做。 本规范在制定过程中,主要参考了业界比较推崇的《华为软件编程规范和范例》和《MI SRA 2004规则》,适合C语言初学者使用,目的在于在教学中培养学生良好的编程规范和意识、素质,促进所设计程序安全、健壮、可靠、可读与可维护(程序简单、清晰)。考虑到面向的是初学者,为便于教学和课程考核操作,本规范中的要求比较基本。事实上,很多公司都有自己规定的代码风格,包括命名规则、缩进规则等,学生参加工作后,应再进一步学习和应用公司的规范。 建议学生在学习本规范的同时,花点时间阅读本规范的参考文献原文,特别是熟读本规范的参考文献之一的《“安全第一”的C语言编程规范》,深刻理解编程规范与程序安全、健壮、可靠、可读、可维护间的关系和作用,在学习和工作中养成良好的编程风格。 1 排版 1.1 严格采用阶梯层次组织程序代码 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case 语句下的情况处理语句也要遵从语句缩进要求。 程序块的分界符(如C/C++ 语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if 、for 、do 、while 、switch 、case 语句中的程序都要采用如上的缩进方式。 各层次缩进的风格采用TAB缩进(TAB宽度原则上使用系统默认值,TC使用8空格宽度,VC使用4空格宽度)。示例:

Java编程规范

Java编程规范本文引用阿里Java开发手册。GitHub阅读地址: 目录 编程规约 - 命名规约 - 常量定义 - 格式规范 - OOP规约 - 集合处理 - 并发处理 - 控制语句 - 注释规约 - 其他 - 异常处理 - 建表规约 - 索引规约 - SQL规约

- ORM规约 编程规约 命名规约 1、【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 反例: _name / __name / $Object / name_ / name$ / Object$1 2、【强制】所有编程相关的命名严禁使用拼音与英语混合的方式,更不允许直接使用中的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即纯拼音的命名方式也要避免采用。 反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 变量 = 3; 正例: ali / alibaba / taobao / cainiao / aliyun / youku / hangzhou 等国际通用的名称,可视为英文。12345 3、【强制】类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名) DO / DTO / VO / DAO 等。 正例: MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例: macroPolo / UserDo / XMLService / TCPUDPDeal

/ TAPromotion123 4、【强制】方法名、参数名、成员变量、局部变量都统一只用 lowerCamelCase 风格,必须遵从驼峰形式。 正例: localValue / getHttpMessage() / inputUserId1 5、【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 正例: MAX_STOCK_COUNT 反例: MAX_COUNT123 6、【强制】抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。 7、【强制】中括号是数组类型的一部分,数组定义如下:String[] args ; 反例:请勿使用 String args[] 的方式来定义1 8、【强制】 POJO 类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(), RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。1 9、【强制】包名统一使用小写,点分隔符之间有且仅有一

华为Java语言编码规范标准

Java语言编码规范 Prepared by 拟制Date 日期 yyyy-mm-dd Reviewed by 评审人Date 日期 yyyy-mm-dd Approved by 批准Date 日期 yyyy-mm-dd

Revision Record 修订记录

Table of Contents 目录 1. 范围 (4) 2. 规范性引用文件 (4) 3. 术语和定义 (4) 4. 排版规范 (5) 4.1. 规则 (5) 4.2. 建议 (7) 5. 注释规范 (9) 5.1. 规则 (9) 5.2. 建议 (15) 6. 命名规范 (17) 6.1. 规则 (17) 6.2. 建议 (18) 7. 编码规范 (20) 7.1. 规则 (20) 7.2. 建议 (24) 8. JTEST规范 (26) 8.1. 规则 (26) 8.2. 建议 (27)

1.范围 本规范规定了使用Java语言编程时排版、注释、命名、编码和JTEST的规则和建议。 本规范适用于使用Java语言编程的产品和项目。 2.规范性引用文件 下列文件中的条款通过本规范的引用而成为本规范的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本规范,然而,鼓励根据本规范达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本规范。 3.术语和定义 规则:编程时强制必须遵守的原则。 建议:编程时必须加以考虑的原则。 格式:对此规范格式的说明。 说明:对此规范或建议进行必要的解释。 示例:对此规范或建议从正、反两个方面给出例子。

程序代码注释编写规范

百度文库- 让每个人平等地提升自我 1 程序代码注释编写规范 为提高控制程序的阅读性与可理解性,现制定相关代码程序代码注释编写的编写规范。 一般情况下,源程序有效注释量必须在20%以上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 常规注释有以下两种方式。 单行:以"文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。 示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************* (C), MicTiVo International. Co., Ltd. 1.File : . History: Date: Author: Modification: 2. .. *************************************************/ 一、源文件头 源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。 示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************************ (C), MicTiVo International. Co., Ltd. FileName: Author: Version : Date: : / /*receive _process() */ 意:与溢出中断写初值不同}

java编码规范考试题答案

一、单选题 1. 如下关于集合类的描述错误的是B A. 含有集合意义的属性命名,尽量包含其复数的意义 B. 集合中的数据不需要释放,垃圾回收器会自动回收 C. 集合必须指定模板类型 D. 使用集合类时要设置初始化容量 2. 关于线程以下说法错误的有B A. 新起一个线程,都要使用Thread.setName(“…”)设置线程名 B. 在JDK1.5或更新的版本中,若字符串拼接发生在单线程环境,使用StringBuffer C. 对多线程访问的变量、方法,必须加锁保护,避免出现多线程并发访问引起的问题 D. 线程使用时,要在代码框架中使用线程池,避免创建不可复用的线程;禁止在循环中创建新线程,否则会引起JVM资源耗尽 3. 下面哪个是推荐使用的对称密码算法B A. DES B. AES C. SHA D. RSA

4. 以下说法正确的有C A. 程序中的一些状态多直接用数字表示,如函数执行成功return 1 B. 对于表示函数执行错误,多用约定的错误码来标识 C. 用有意义的静态变量或者枚举来代替数字型的程序状态,如函数执行成功return SUCCESS D. 程序中的魔鬼数字并不可怕,需要所有开发人员努力理解这些数字的含义 5. 下列错误使用异常的做法是D A. 在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常 B. 一个方法不应抛出太多类型的异常。throws/exception子句标明的异常最好不要超过三个 C. 异常捕获尽量不要直接catch (Exception ex),应该把异常细分处理 D. 程序内抛出的异常本身就可说明异常的类型、抛出条件,可不填写详细的描述信息。捕获异常后用exception.toString()取到详细信息后保存 6. 关于命名规范,以下说法错误的有D A. 属性名使用意义完整的英文描述,第一个单词的字母使用小写,剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同 B. 方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法 C. 方法中,存取属性的方法采用setter 和getter方法,动作方法采用动词和动宾结构

程序的书写规则(程序的编码规范)

程序的书写规则(程序的编码规范) 随着软件产品的功能增加和版本的提高,代码越来越复杂,源文件也越来越多,对于软件开发人员来说,除了保证程序运行的正确性和提高代码的运行效率之外,规范风格的编码会对软件的升级、修改、维护带来极大的方便性,也保证程序员不会陷入“代码泥潭”中无法自拔。开发一个成熟的软件产品,除了有详细丰富的开发文档之外,必须在编写代码的时候就有条不紊,细致严谨。 以下的编码规范包含了程序排版、注释、命名、可读性、变量、程序效率、质量保证、代码编译、代码测试和版本控制等注意事项。 一、排版: 1.关键词和操作符之间加适当的空格。 2.相对独立的程序块与块之间加空行 3.较长的语句、表达式等要分成多行书写。 4.划分出的新行要进行适应的缩进,使排版整齐,语句可读。 5.长表达式要在低优先级操作符处划分新行,操作符放在新行之首。 6.循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。 7.若函数或过程中的参数较长,则要进行适当的划分。 8.不允许把多个短语句写在一行中,即一行只写一条语句。 9.函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风 格。 10.C/C 语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和 ‘}’应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

二、注释 1.注释要简单明了。 2.边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。 3.在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防 止注释二义性。保持注释与其描述的代码相邻,即注释的就近原则。 4.对代码的注释应放在其上方相邻位置,不可放在下面。 5.对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域 的注释应放在此域的右方;同一结构中不同域的注释要对齐。 6.变量、常量的注释应放在其上方相邻位置或右方。 7.全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取 它以及存取时注意事项等的说明。 8.在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生 成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等。 9.在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能 描述;输入、输出及返回值说明;调用关系及被调用关系说明等。 三、命名 1.较短的单词可通过去掉“元音”形成缩写; 2.较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序, 避免使用默认优先级。 3.使用匈牙利表示法 四、可读性 1.避免使用不易理解的数字,用有意义的标识来替代。 2.不要使用难懂的技巧性很高的语句。

Java编程要求规范精彩试题

JAVA编程规范--试题 姓名:工号:部门:成绩: 一. 判断题(共15题,每题2分,直接在括号内打“√”或“×”) 1、任何时候都不要使接口可以序列化。x 2、相对独立的程序块之间、变量说明之后必须加空行。√ 3、当程序需要释放对象的时候,应该手工调用finalize方法以释放对象。x 4、公司的规范要求注释率是20%以上,并且必须有助于对程序的阅读理解。x 5、为了程序更加简洁,我们应该尽量使用下面的方式来赋值:a = b = 1 。x 6、每个类都需要定义构建器。x 7、类名、方法名、属性名的命名,都应该使用意义完整的英文描述。√ 8、main() 方法的定义是public static void main(String args[])。x 9、常量名应该使用全大写,英文单词之间用下划线或者-分隔开。并且,常量应该使用 final static修饰。x 10、公有方法参数名可以和属性名相同,但局部变量不能和属性名相同。√ 11、一两行代码就能完成的功能没有必要编写方法实现。x 12、对于模块间接口方法的参数的合法性检查,调用者和被调用者都应该对参数进行合 法性检查。x 13、运行期异常使用RuntimeException的子类来表示,必须在方法声明上加throws子句。 x非运行期异常是从Exception继承而来的,不用在可能抛出异常的方法声明上加throws 子句。x 14、使用ObjectStream 的方法后,调用release() ,释放对象。X 15、减小单个方法的复杂度,使用的 if, while, for, switch 语句要在10个以内。√ 二、单项选择题(共23题,每题2分) ( c )1、排版时,代码缩进应该采用的方式是: (A)Tab缩进 (B)2个空格缩进 (C)4个空格缩进 (D)8个空格缩进

(完整版)阿里巴巴编码规范(Java)题库

多选 1.如何处理单元测试产生的数据,下列哪些说法是正确的?ABC A .测试数据入库时加特殊前缀标识。 B .测试数据使用独立的测试库。 C .自动回滚单元测试产生的脏数据。 D .无须区别,统一在业务代码中进行判断和识别。 多选 2.关于并发处理,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 B .同步处理时,能锁部分代码区块的情况下不要锁整个方法;高并发时,同步调用应该考虑到性能损耗。 C .创建线程或线程池时,推荐给线程指定一个有意义的名称,方便出错时回溯。 D .推荐使用Executors.newFixedThreadPool(int x)生成指定大小的线程池。(线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式) 多选 3.下列哪些说法符合《阿里巴巴Java开发手册》:ACD A .对于“明确停止使用的代码和配置”,如方法、变量、类、配置文件、动态配置属性等要坚决从程序中清理出去,避免造成过多垃圾。 B .永久弃用的代码段注释掉即可,即不用加任何注释。 C .对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的逻辑。 多选 4.关于分页查询,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .分页查询,当统计的count为0时,应该直接返回,不要再执行分页查询语句。 B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑,提高效率。

Java编程规范

Java编程规范 目录 Java编程规范 (1) 1编码规则 (1) 2命名规范 (7) 2.1类名、变量名(非final)、方法名 (7) 2.2驼峰式命名 (7) 2.3不能使用没有任何含义的英文字母进行命名 (7) 2.4不能使用拼音进行命名,统一使用准确的英文进行命名 (8) 2.5包名 (8) 2.6接口与类的命名 (8) 2.7抽象类命名 (8) 2.8实现类命名 (8) 2.9工具类命名 (8) 2.10变量命名 (8) 2.115、方法命名 (9) 2.12系统的命名约定 (9) 1编码规则 1、数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close(),如果有多个IO对象需要close(),需要分别对每个对象的close()方法进行try-catch,防止一个IO对象关闭失败其他IO对象都未关闭。 手动控制事务提交也要进行关闭,对大对象进行关闭操作 示例: try { // ... ... } catch(IOException ioe) { //... ... } finally { try { out.close();

} catch(IOException ioe) { //... ... } try { in.close(); } catch(IOException ioe) { //... ... } } 2、系统非正常运行产生的异常捕获后,如果不对该异常进行处理,则应该记录日志。 说明:此规则指通常的系统非正常运行产生的异常,不包括一些基于异常的设计。若有特殊原因必须用注释加以说明。 logger.error(ioe,“[类.方法]描述”,参数); 示例: try { //.... ... } catch(IOException ioe) { logger.error(ioe); } 3、自己抛出的异常必须要填写详细的描述信息。 说明:便于问题定位。 示例: throw new IOException("Writing data error! Data: "+ data.toString()); 4(删除)、在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。 说明: 一个系统或者模块应该统一规划异常类型和返回码的含义。 但是不能用异常来做一般流程处理的方式,不要过多地使用异常,异常的处理效率比条件分支低,而且异常的跳转流程难以预测。

华为JAVA编码规范

1.程序块采用缩进风格,空格为4个. 说明: 对于开发工具自动生成的代码可以不一致 2.分界符(如大括号{和})应各自占一行并且在同一列,同时与引用它们的语句左 对齐,在方法的开始,类和接口的定义,以及if,for,do,while,switch,case语句都要采用上述缩进 说明: for(…) { …//your code } 3.较长(>80字符)的语句,表达式和参数要分多行,长表达式要在低优先级操作符 划分新行,操作符放在行首,新行要适当缩进,整齐,语句可读. 说明: if(filename != null && new File(logPath+filename).length() < logConfig.getFileSize()) { …//your code } 4.一行只写一条语句 说明: LogFilename wow = null; LogFilename that = null; 5.if,for,do,switch,while,case,default各占一行,它们的执行语句无论多少都要加{} 说明: if(writeToFile) { writeFileThread.interrupt(); } 6.相对独立的程序块,变量,说明要加空行 说明: if(log.getLevel() < log.getRecord()) { return ; } //空行

LogWrite writer; 7.对齐只用空格键,不用TAB键 说明: 以免使用不同的编辑器阅读程序时,因TAB键所设置的空格数不同而造成程序布局不整齐,JBuildr,UltraEdit等编辑环境,支持行首TAB替换成空格,应将该选项打开 8.两个以上的关键字,变量,常量进行对等操作时,操作符之前,之后或前后要加空 格,进行非对等操作时,如果是关系密切的立即操作符,后面不加空格(如.操作符) 说明: 采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格 9.类属性和方法不要交叉放置,不同存取范围的属性和方法也不要交叉放置 说明: 类定义:{ 类公有属性定义; 类保护属性定义; 类私有属性定义; 类公有方法定义; 类保护方法定义; 类私有方法定义; } 10.源程序的有效注释量必须在30%以上 11.包的注释写入一个名为package.html的html格式的说明文件放入当前路径 12.包的注释内容:本包作用,详细描述本包内容,产品模块名称及版本,公司版本 说明: 一句话描述 详细描述 产品模块
公司版本信息

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

程序编码规范

蜗牛游戏程序编码规范 (版本 0.1) 规范说明:............................................................. 一、命名规则...................................................... 二、程序的版式.................................................... 三、注释.......................................................... 四、服务端平台无关................................................ 五、服务端表格操作................................................ 六、客户端文件读写................................................ 七、客户端内存操作................................................ 八、脚本内的注释.................................................. 规范说明: 制定该规范的目的是让程序清晰易懂、易维护、易管理。该规范为强制规范,必须执行,如果有没涉及的地方请参考《高质量C++-C编程指南》。当所在编程环境(如MFC、Linux)与本规范有差异时,可以使用所在编程环境的规范,但是同一个项目必须是统一的规范。 最后希望大家都能养成一个良好的程序习惯,一个好的习惯受益终身! 一、命名规则 1.所有命名应当直观且可拼读,并具有实际意义; 2.类名和函数名用大写字母开头的单词组合而成,接口类名以I开头; 3.常量全用大写的字母,用下划线分割单词,尽量不要使用宏; 4.类的数据成员加前缀m_,全局变量加前缀g_,静态变量加前缀s_; 5.变量名第一个字母小写,使用“名词”或“形容词+名词”的词义表示法; 示例: ·局部变量 char *pStringBuffer; int &stringFindResult; bool isEngineStartup; ·函数命名 unsigned int GetVoyageCoreState(); static bool GetVoyageServiceCount(int &count); ·结构类型

(完整word版)JAVA代码规范详细版

JAVA代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。

Java编码规范(命名规则).

1. Java 命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符。此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。 1.1一般概念 n 尽量使用完整的英文描述符 n 采用适用于相关领域的术语 n 采用大小写混合使名字可读 n 尽量少用缩写,但如果用了,要明智地使用,且在整个工程中统一 n 避免使用长的名字(小于 15个字母是个好主意 n 避免使用类似的名字,或者仅仅是大小写不同的名字 n 避免使用下划线(除静态常量等 1.2示范 包(Package采用完整的英文描述符,应该都是由小写字母组成。对于全局包,将你的 Internet 域名反转并接上包名。 j ava.aw t,com.ambysof t.www.persistence 类(Class采用完整的英文描述符,所有单词的第一个字母大写。 Customer, SavingsAccount 接口(Interface采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。习惯上,名字后面加上后缀 able, ible 或者 er,但这不是必需的。Contactable,Prompter 组件/部件(Component使用完整的英文描述来说明组件的用途,末端应接上组件类型。 okButton, customerList,f ileMenu 异常(Exception通常采用字母 e 表示异常。 e

类变量字段采用完整的英文描述,第一个字母小写,任何中间单词的首字母大写。 firstName, lastName 实参/参数同字段/属性的命名规则 public void setFirstName(String firstName{ this.firstName = f irstName;} 局部变量同字段/属性的命名规则 获取成员函数被访问字段名的前面加上前缀 get。 getFirstName(, getLastName( 布尔型的获取成员函数所有的布尔型获取函数必须用单词 is做前缀。isPersistent(, isString( 设置成员函数被访问字段名的前面加上前缀 set。 setFirstName(, setLastName(,setWarpSpeed( 普通成员函数采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写。 openFile(, add Account( 静态常量字段(static final全部采用大写字母,单词之间用下划线分隔。 MIN_B ALANCE, DEF AULT_DATE 循环计数器通常采用字母 i,j,k 或者 counter 都可以接受。 i, j, k, counter 数组数组应该总是用下面的方式来命名:obj ectType[]。 byte[] buff er; 2. Java 注释约定 一个很好的可遵循的有关注释的经验法则是:问问你自己,你如果从未见过这段代码,要在合理的时间内有效地明白这段代码,你需要哪些信息。 2.1. 一般概念 n 注释应该增加代码的清晰度

后台Java程序编码标准

后台Java程序编码标准

————————————————————————————————作者:————————————————————————————————日期:

Java程序编码规范 后台技术中心 编写人:汪源 编写时间:2009-3-27 部门名:后台技术中心

修订记录 编号修订内容简述修订日期版本修订人1 初始版本2009-3-27 0.1 汪源

总体约定 1.一个工程中的所有文件应统一使用GBK或UTF-8编码。 2.代码使用大小为4的TAB缩进。 3.代码使用package组织,package名应以https://www.wendangku.net/doc/3d1762380.html,ease.开关。 4.使用Vector等集合框架类时,应指定模板类型参数。 命名规范 类名、文件名、枚举变量等统一使用首字母大写,如 01 class TableInfo { 02 ... 03 }; 函数参数、局部变量、函数名等统一使用Sun风格的命名,即第一个单词小写,其它单词首字母大写,如: 01 int maxLength; 02 NtseIndex *primaryKey; 03 bool dropTable(...) { 04 // 05 } 不允许使用匈牙利式命名法。 常量统一使用全大写,单词之间用_连接,如: 01 static final int NTSE_NAME_LEN; 目录名统一使用全小写字母,单词之间用-连接。 语句 主要是{放在同一行及空格使用上的约定。 if/else形如(注意其中每个空格的位置): 01 if (xxx) { 02 ... 03 } else if (xxx) { 04 ... 05 } else { 06 ... 07 }

Java代码规范详细版

Java代码规范 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。尽量做到每个人按照规范来,多人开发如一人开发一样。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。 1.1.5 英文vs 拼音

软件编码规范.doc

软件编码规范 中国人民银行清算总中心 支付系统开发中心

注:变化状态:A—增加,M—修改,D—删除

目录 第一篇C/C++编码规范 (6) 第一章代码组织 (6) 第二章命名 (9) 2.1文件命名 (9) 2.2变量命名 (9) 2.3常量与宏命名 (10) 2.4类命名 (10) 2.5函数命名 (10) 2.6参数命名 (11) 第三章注释 (12) 3.1文档化注释 (12) 3.2语句块注释 (17) 3.3代码维护注释 (20) 第四章编码风格 (22) 4.1排版风格 (22) 4.2头文件 (26) 4.3宏定义 (27) 4.4变量与常量 (30) 4.5条件判断 (32) 4.6空间申请与释放 (33) 4.7函数编写 (33) 4.8类的编写 (37) 4.9异常处理 (40) 4.10特殊限制 (40) 第五章编译 (41) 第六章ESQL/C编码 (46) 第二篇JAVA编码规范 (47) 第一章代码组织 (48) 第二章命名 (51) 2.1包命名 (51) 2.2类命名 (51) 2.3接口命名 (51) 2.4方法命名 (51) 2.5变量命名 (51) 2.6类变量命名 (52) 2.7常量命名 (52) 2.8参数命名 (52) 第三章注释 (53) 3.1文档化注释 (53) 3.2语句块注释 (57) 3.3代码维护注释 (59) 第四章编码风格 (61) 4.1排版风格 (61) 4.2包与类引用 (66) 4.3变量与常量 (66) 4.4类编写 (67) 4.5方法编写 (68)

4.6异常处理 (71) 4.7特殊限制 (71) 第五章编译 (73) 第六章JSP编码 (74) 6.1文件命名及存放位置 (74) 6.2内容组织 (74) 6.3编码风格 (76) 6.4注释 (78) 6.5缩进与对齐 (78) 6.6表达式 (79) 6.7JavaScript (79) 第三篇POWERBUILDER编码规范 (80) 第一章代码组织 (81) 第二章命名 (82) 2.1文件命名 (82) 2.2对象命名 (82) 2.3变量命名 (84) 2.4常量命名 (85) 2.5函数与事件命名 (85) 2.6参数命名 (85) 第三章注释 (85) 3.1文档化注释 (85) 3.2语句块注释 (88) 3.3代码维护注释 (88) 第四章编码风格 (89) 4.1界面风格 (89) 4.2排版风格 (93) 4.3变量与常量 (95) 4.4条件判断 (96) 4.5空间申请与释放 (97) 4.6函数编写 (97) 4.7特殊限制 (97) 第五章SQL编码 (98)

java编码规范

JAVA编码规范

目录 JAVA编码规范 (1) 1 概述 (8) 1.1范围 (8) 1.2说明 (8) 2 文件体系结构 (10) 2.1文件体系规则 (10) 规则2.1.1 JSP文件目录结构 (10) 建议2.1.2 Java文件目录结构 (10) 2.2源文件结构规则 (11) 规则2.2.3 类变量的声明顺序是public,protected,package,private (11) 规则2.2.4 变量、常量的注释应放在其上方相邻位置 (12) 规则2.2.5 用递增的方式写构造器(比如:参数多的写在后面) (12) 规则2.2.6 类变量的存取方法:get和set方法 (12) 规则2.2.7 如果定义main() 方法,必须将main方法写在类的底部 (12) 3 文件命名规则 (13) 规则3.1S TRUCTS配置文件命名............................................... 错误!未定义书签。 规则3.2JSP文件命名 (13) 规则3.3J AVA文件命名 (13) 4 排版规则 (14)

4.1语句排版规则 (14) 规则4.2.1简单语句每行至多包含一条语句 (14) 规则4.2.2 复合语句被括其中的语句缩进一个层次 (14) 规则4.2.3 左大括号"{"应位于复合语句起始行的行尾,前面需加一个空格符;右大括号"}"应另起一行并与复合语句首行对齐。 (14) 规则4.2.4 必须用"{"和"}"将if内的语句括起来。(即使只有一条语句的情况下) (14) 规则4.2.7 在多层嵌套的for语句中,应在for上一行增加逻辑注释 (15) 建议4.2.14 “=”等比较符前后加一个空格 (15) 5 注释规则 (16) 5.1类注释规则 (16) 规则5.1.1 使用JavaDoc,列出功能、版本信息、日期、作者和版权声明 (16) 规则5.1.2 如果对文件进行了修改,必须说明修改目的、修改日期、修改人,并变更版本信息 (16) 5.2类方法注释规则................................................................. 错误!未定义书签。 规则5.2.1 用中文写出每个参数和返回值的含义 (16) 规则5.2.2 当修改其他组员创建的类时,增加author标签错误!未定义书签。 5.3单行注释规则..................................................................... 错误!未定义书签。 规则5.4.1单行注释位于所描述内容之前 ...................... 错误!未定义书签。 规则5.4.2 单行注释之前留一行空行 ............................. 错误!未定义书签。

相关文档