# 开发第一课-代码规范!

# 代码不规范,亲人两行泪!

代码不规范,亲人两行泪!

# 1.声明常量

public static final String XX = "";
//1.一般来说static和final是同时出现的.因为,static后,此值为常量,伴随程序整个生命周期,而单纯final,每次使用需要再次创建→垃圾回收.很消耗性能.
//2.一个简单地修饰,修饰符应当满足如下顺序
Annotations
public
protected
private
-------------
abstract
static
-------------
final
transient
volatile
synchronized
native
strictfp
    

# 2.局部变量返回

错误:
DTO dto = service.dosomething(xxx);
return dto;
正确:
return service.dosomething(xxx);
//减少一次开销.

# 3.相同常量返回值

//错误
public void run() {    
    prepare("action1"); // Noncompliant - "action1" is duplicated 3 times    
    execute("action1");    
    release("action1");  
}
//正确
private static final String ACTION_1 = "action1"; // Compliant    
public void run() {    
    prepare(ACTION_1); // Compliant    
    execute(ACTION_1);    
    release(ACTION_1);  
}

# 4.包路径命名规范

错误:
package com.xxx.xxx.aaaBbb.controller;
正确:
package com.xxx.xxx.aaa.bbb.controller;
//应当是纯小写的,如果一个词无法概括,那么应该创建两层包路径

# 写代码常需要注意的点!

# 1.领域服务属于领域层,因此他并不了解应用层中的类.

领域是最核心的,所有此领域内核心的业务都在这里,他只依赖于common中一些公共等.

# 2.查询结果为null该如何返回.

如果是query**ById,查询结果是什么就返回什么,null就是null,需不需要抛异常那是业务的事.

如果是queryList,查询结果是null,可以返回new ArrayList,但是每次会创建个新的,如果节约性能可以返回

Collections.emptyList()/Collections.emptyMap()

他实际上就是public static final List EMPTY_LIST = new EmptyList<>();,但是要注意的事,这个list只可以遍历,如果进行操作则会报错.

# 3.远程/服务间 调用注意事项.

有个业务A,其中要去另一个服务C去查询些信息.A是不应该直接去查询的,而是应该通过自己领域内的某个接口B,这个B的实现去给和C打交道,C干了什么无所谓,只有A和B商量好,对象内容是什么就好,剩下的由B去操作,查询后转化到A要求的对象.这样,A,C解耦,一旦发生变化,重新实现个新的接口即可,业务无需变更.