Annotations Over Naming Conventions 使用注解代替命名约定

越看这些文章,感觉Effect java 第二版里面基本都有..

原文地址
http://www.c2.com/cgi/wiki?AnnotationsOverNamingConventions

许多的类库,框架和系统熟练的操作Java对象和类,比如在ObjectRelationalMapping 工具中持久化对象到数据库中,XML绑定工具用于映射XML文档与Java对象,类库从流中读写对象,测试框架如同编写一个Java类的方式读取和运行测试.

这些成熟的系统工作在元数据级别,熟练控制Java类,方法,字段和无类型对象,从元数据级别表达他们必须知道的信息区引导他们的操作,一个对象必须确定怎么去关联改特性从一个对象到数据库中的表盒列,一个serialiser 必须知道如何将一个对象描述成一个二进制流,一个测试框架必须知道那个类包含了测试,那个方法必须被测试而不能直接运行.

在Java1.5之前,成熟的代码知道推断出这些信息通过代码的约束,比如TagInterfaces,这种继承级别的和NamingConventions,以及使用配置文件等.

命名约束能够限制程序员使用的词汇,TagInterfaces滥用一种语言的特性,将使得代码难以理解,强迫类具有一个特别的基类使得它难于被复用,以及使用继承去移除重复.

Java5引入了一种新的语言特性,annotations,借鉴之C#,一个注解是一种明确的元数据附加在一个类,方法,字段或者参数之上,一个语言的元素必要时能够添加多个注解,注解能够使用反射工具去了解他们,这使得程序员溶入他们的类使用不同的反射工具,而不需要去跟随任何规定编码约束或者设计格式.

然而,注解语法是难看的,以及许多注解使得代码杂乱与难于阅读.

什么时候你能够使用注解代替命名约束呢?

在Java1.5之前,TagInterfaces被使用提供类的元数据,那如果是方法呢,遗憾的是,同时反射允许了解关于类的层次结构,和从此实现TagInterfaces,这是并不似类似的机制使用在方法上,通过一个方法的名字,从此,元数据被与方法名纠缠在一起,比如JavaBeans使用方法,必须使用get和set开头,用于BeanBox去设置和修改一个直接类的属性.

注解提供一种更灵活的机制,一种使用两个注解去代替get/set约定的可能, @BeanGetter 与 @BeanSetter,或者可能只使用一个 @Bean 注解与一个枚举参数,@Bean(MethodType.GETTER), @Bean(MethodType.SETTER). 一个BeanBox将使用注解信息代替固定名称方法.

当是,注解难看和混乱了代码比起使用 SystemOfNames去表达相同的信息.

他们使用相同的模式,所以可以适当的在不同的区域使用,不过最好使用文档进行规定,不要因为个人爱好进行自由使用.避免引起不必要的混乱(自己加入...大概意思)

下面将介绍一些使用这两种风格的地方.

实际上,JavaBeans没有必要使用get和set前缀,这种映射命名只会在BeanInfo中使用.

参考文档
[url]http://java.sun.com/j2se/1.4.2/docs/api/java/beans/BeanInfo.html [/url]
[url]http://java.sun.com/j2se/1.4.2/docs/api/java/beans/PropertyDescriptor.html [/url]

一个更好的例子可能是JUnit4和TestNG,他们使用@Test注解识别方法去运行测试,在JUnit3可以看到方法名使用"test"开头.

其他一些例子

Hibernate 3使用注解去定义如何将一个对象映射到关系型数据库的一行记录之上.
RubyOnRails' ActiveRecord 使用命名约定

JAXB 2使用注解定义如何将一个对象映射到一个xml文档,以及如一个将一个类关联到XSD
schema.
XStream 使用命名约定,关联类,属性或者字段名与XML元素和熟悉名.

批注:这个翻译感觉很乱,一些使用的术语并不太熟悉.有待提高,关键是坚持 ,加油咯!

如果你看的不舒服,抱歉.












你可能感兴趣的:(数据结构,框架,bean,Hibernate,J2SE)