阿里Java代码参考 阿里巴巴java代码分层( 二 )


【参考】各层命名规约:
1) 获取单个对象的方法用 get 做前缀 。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects 。3) 获取统计值的方法用 count 做前缀 。
4) 插入的方法用 save/insert 做前缀 。
5) 删除的方法用 remove/delete 做前缀 。
6) 修改的方法用 update 做前缀 。
1) 数据对象:xxxDO,xxx 即为数据表名 。
2) 数据传输对象:xxxDTO , xxx 为业务领域相关的名称 。
3) 展示对象:xxxVO,xxx 一般为网页名称 。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO 。
【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中 。
【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本 , 直接用类名来访问即可 。
【强制】相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object 。
说明:可变参数必须放置在参数列表的最后 。(提倡同学们尽量不用可变参数编程)
【强制】所有整型包装类对象之间值的比较 , 全部使用equals方法比较 。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值 , Integer 对象是在 IntegerCache.cache 产 生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断 。
关于基本数据类型与包装数据类型的使用标准如下:
说明: POJO 类属性没有初值是提醒使用者在需要使用时 , 必须自己显式地进行赋值  , 任何 NPE 问题 , 或 者入库检查,都由使用者来保证 。
正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险 。
反例: 比如显示成交总额涨跌情况,即正负 x% , x 为基本数据类型,调用的 RPC 服务,调用不成功时,返回的是默认值 , 页面显示为 0% , 这是不合理的 , 应该显示成中划线。所以包装数据类型的 null 值,能 够表示额外的信息 , 如:远程调用失败,异常退出 。
【强制】POJO 类必须写 toString 方法 。
使用 IDE 中的工具:source generate toString 时 , 如果继承了另一个 POJO 类,注意在前面加一下 super.toString 。
说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排查问题 。
【强制】关于hashCode和equals的处理 , 遵循如下规则:
说明:String 已覆写 hashCode 和 equals 方法 , 所以我们可以愉快地使用 String 对象作为 key 来使用 。
【强制】线程资源必须通过线程池提供 , 不允许在应用中自行显式创建线程 。
说明:线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问 题 。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题 。
【强制】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则 , 规避资源耗尽的风险 。
以上规范在设计代码中 , 是比较重要的原则 。如果编写代码的过程中 , 可以依照以上原则,那代码的可读性和可维护性将大大提升
JAVA除了要满足命名规则之外,常量和变量一般还要遵循哪些命名惯例和约定?1、package命名要求包含的所有字符均为小写,同时不能有特殊字符 。

推荐阅读