---
title: 代ç å½åæå
category: 代ç è´¨é
---
æè¿è®°å¾æåå·¥ä½é£ä¸æ®µæ¶é´ï¼ é¡¹ç® Code Review çæ¶åï¼æç»å¸¸å 为åéå½åä¸è§èè被 âdissâ!
ç©¶å
¶åå è¿æ¯èªå·±é£ä¼ç»éªä¸è¶³ï¼èä¸ï¼å¤§å¦é£ä¼å项ç®çæ¶åä¸å¤ªæ³¨æè¿äºé®é¢ï¼æ³çåªè¦æåè½å®ç°åºæ¥å°±è¡äºã
使¯ï¼å·¥ä½ä¸å°±ä¸ä¸æ ·ï¼ä¸ºäºä»£ç çå¯è¯»æ§ãå¯ç»´æ¤æ§ï¼é¡¹ç®ç»å¯¹äºä»£ç è´¨éçè¦æ±è¿æ¯å¾é«çï¼
åæ®µæ¶é´ï¼é¡¹ç®ç»æ°æ¥çä¸ä¸ªå®ä¹ çä¹ç»å¸¸å¨ Code Review å 为åéå½åä¸è§èè被 âdissâï¼è¿è®©ææ³å°èªå·±åå°å
¬å¸å代ç é£ä¼çæ¥åã
äºæ¯ï¼æå°±ç®ååäºè¿ç¯å
³äºåéå½åè§èçæç« ï¼å¸æè½å¯¹åæ ·ææ¤å°æ°çå°ä¼ä¼´æä¾ä¸äºå¸®å©ã
ç¡®å®ï¼ç¼ç¨è¿ç¨ä¸ï¼æå¤ªå¤å¤ªå¤è®©æä»¬å¤´ç¼çäºæ
äºï¼æ¯å¦å½åãç»´æ¤å
¶ä»äººç代ç ãåæµè¯ãä¸å
¶ä»äººæ²é交æµççã
æ®è¯´ä¹åå¨ Quora ç½ç«ï¼ç±æ¥è¿ 5000 åç¨åºå票éåºæ¥çæé¾çäºæ
å°±æ¯âå½åâã
大åé¼é¼çãéæãçä½è
è马ï¼Martin Fowlerï¼æ¾ç»å¨[TwoHardThings](https://martinfowler.com/bliki/TwoHardThings.html)è¿ç¯æç« 䏿å°è¿ CS é¢åæä¸¤å¤§æé¾çäºæ
ï¼ä¸æ¯ **ç¼å失æ** ï¼ä¸æ¯ **ç¨åºå½å** ã

è¿ä¸ªå¥è¯å®é
ä¸ä¹æ¯è马å¼ç¨å«äººçï¼ç±»ä¼¼çè¡¨è¾¾è¿æå¾å¤ãæ¯å¦åå¸å¼ç³»ç»é¢åæä¸¤å¤§æé¾çäºæ
ï¼ä¸æ¯ **ä¿è¯æ¶æ¯é¡ºåº** ï¼ä¸æ¯ **ä¸¥æ ¼ä¸æ¬¡ä¼ é** ã

ä»å¤©å±ä»¬å°±åç¬æåº â**å½å**â æ¥èèï¼
è¿ç¯æç« é
åæä¹ååç [ãç¼ç 5 åéï¼å½å 2 å°æ¶ï¼å²ä¸æå
¨ç Java å½åè§èåèï¼ã](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486449&idx=1&sn=c3b502529ff991c7180281bcc22877af&chksm=cea2443af9d5cd2c1c87049ed15ccf6f88275419c7dbe542406166a703b27d0f3ecf2af901f8&token=999884676&lang=zh_CN#rd) è¿ç¯æç« é
è¯»æææ´ä½³å¦ï¼
## 为ä»ä¹éè¦éè§å½åï¼
å±ä»¬éè¦å
ææä¸ºä»ä¹è¦éè§ç¼ç¨ä¸çå½åè¿ä¸è¡ä¸ºï¼å®å¯¹äºæä»¬çç¼ç 工使çä»ä¹æä¹ã
**为ä»ä¹å½åå¾éè¦å¢ï¼** è¿æ¯å 为 **好çå½å峿¯æ³¨éï¼å«äººä¸çå°ä½ çå½åå°±ç¥éä½ çåéãæ¹æ³æè
ç±»æ¯åä»ä¹çï¼**
ç®åæ¥è¯´å°±æ¯ **å«äººæ ¹æ®ä½ çå½åå°±è½ç¥éä½ ç代ç è¦è¡¨è¾¾çææ** ï¼ä¸è¿ï¼åæè¿ä¸ªäººä¹è¦æåºæ¬çè±è¯ç¥è¯ï¼å¯¹äºä¸äºç¼ç¨ä¸å¸¸è§çåè¯æ¯è¾çæï¼ã
ç®å举个ä¾å说æä¸ä¸å½åçéè¦æ§ã
ãClean Codeãè¿æ¬ä¹¦æç¡®æåºï¼
> **好çä»£ç æ¬èº«å°±æ¯æ³¨éï¼æä»¬è¦å°½éè§èåç¾åèªå·±çä»£ç æ¥åå°ä¸å¿
è¦ç注éã**
>
> **è¥ç¼ç¨è¯è¨è¶³å¤æè¡¨è¾¾åï¼å°±ä¸éè¦æ³¨éï¼å°½ééè¿ä»£ç æ¥éè¿°ã**
>
> 举个ä¾åï¼
>
> 廿ä¸é¢å¤æç注éï¼åªéè¦å建ä¸ä¸ªä¸æ³¨éæè¨åä¸äºç©ç彿°å³å¯
>
> ```java
> // check to see if the employee is eligible for full benefits
> if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
> ```
>
> åºæ¿æ¢ä¸º
>
> ```java
> if (employee.isEligibleForFullBenefits())
> ```
## 常è§å½åè§å以åéç¨åºæ¯
è¿éåªä»ç» 3 ç§æå¸¸è§çå½åè§èã
### 驼峰å½åæ³ï¼CamelCaseï¼
驼峰å½åæ³åºè¯¥æä»¬æå¸¸è§çä¸ä¸ªï¼è¿ç§å½åæ¹å¼ä½¿ç¨å¤§å°åæ··åçæ ¼å¼æ¥åºå«å个åè¯ï¼å¹¶ä¸åè¯ä¹é´ä¸ä½¿ç¨ç©ºæ ¼é弿è
è¿æ¥åç¬¦è¿æ¥çå½åæ¹å¼
#### 大驼峰å½åæ³ï¼UpperCamelCaseï¼
**ç±»åéè¦ä½¿ç¨å¤§é©¼å³°å½åæ³ï¼UpperCamelCaseï¼**
æ£ä¾ï¼
```java
ServiceDiscoveryãServiceInstanceãLruCacheFactory
```
åä¾ï¼
```java
serviceDiscoveryãServiceinstanceãLRUCacheFactory
```
#### å°é©¼å³°å½åæ³ï¼lowerCamelCaseï¼
**æ¹æ³åãåæ°åãæååéãå±é¨åééè¦ä½¿ç¨å°é©¼å³°å½åæ³ï¼lowerCamelCaseï¼ã**
æ£ä¾ï¼
```java
getUserInfo()
createCustomThreadPool()
setNameFormat(String nameFormat)
Uservice userService;
```
åä¾ï¼
```java
GetUserInfo()ãCreateCustomThreadPool()ãsetNameFormat(String NameFormat)
Uservice user_service
```
### èå½¢å½åæ³ï¼snake_caseï¼
**æµè¯æ¹æ³åã常éãæä¸¾åç§°éè¦ä½¿ç¨èå½¢å½åæ³ï¼snake_caseï¼**
å¨èå½¢å½åæ³ä¸ï¼å个åè¯ä¹é´éè¿ä¸å线â\_âè¿æ¥ï¼æ¯å¦`should_get_200_status_code_when_request_is_valid`ã`CLIENT_CONNECT_SERVER_FAILURE`ã
èå½¢å½åæ³çä¼å¿æ¯å½åæéè¦çåè¯æ¯è¾å¤çæ¶åï¼æ¯å¦ææä¸é¢çå½åéè¿å°é©¼å³°å½åæ³ç»å¤§å®¶çä¸ä¸ï¼âshouldGet200StatusCodeWhenRequestIsValidâã
æè§å¦ä½ï¼ ç¸æ¯äºä½¿ç¨èå½¢å½åæ³ï¼snake_caseï¼æ¥è¯´æ¯ä¸æ¯ä¸é£ä¹æè¯»ï¼
æ£ä¾ï¼
```java
@Test
void should_get_200_status_code_when_request_is_valid() {
......
}
```
åä¾ï¼
```java
@Test
void shouldGet200StatusCodeWhenRequestIsValid() {
......
}
```
### 串å¼å½åæ³ï¼kebab-caseï¼
å¨ä¸²å¼å½åæ³ä¸ï¼å个åè¯ä¹é´éè¿è¿æ¥ç¬¦â-âè¿æ¥ï¼æ¯å¦`dubbo-registry`ã
å»ºè®®é¡¹ç®æä»¶å¤¹å称使ç¨ä¸²å¼å½åæ³ï¼kebab-caseï¼ï¼æ¯å¦ dubbo 项ç®çå个模åçå½åæ¯ä¸é¢è¿æ ·çã

## 常è§å½åè§è
### Java è¯è¨åºæ¬å½åè§è
**1ãç±»åéè¦ä½¿ç¨å¤§é©¼å³°å½åæ³ï¼UpperCamelCaseï¼é£æ ¼ãæ¹æ³åãåæ°åãæååéãå±é¨åééè¦ä½¿ç¨å°é©¼å³°å½åæ³ï¼lowerCamelCaseï¼ã**
**2ãæµè¯æ¹æ³åã常éãæä¸¾åç§°éè¦ä½¿ç¨èå½¢å½åæ³ï¼snake_caseï¼**ï¼æ¯å¦`should_get_200_status_code_when_request_is_valid`ã`CLIENT_CONNECT_SERVER_FAILURE`ãå¹¶ä¸ï¼**æµè¯æ¹æ³åç§°è¦æ±å
¨é¨å°åï¼å¸¸é以åæä¸¾åç§°éè¦å
¨é¨å¤§åã**
**3ãé¡¹ç®æä»¶å¤¹å称使ç¨ä¸²å¼å½åæ³ï¼kebab-caseï¼ï¼æ¯å¦`dubbo-registry`ã**
**4ãå
åç»ä¸ä½¿ç¨å°åï¼å°½é使ç¨å个åè¯ä½ä¸ºå
åï¼å个åè¯éè¿ "." åéç¬¦è¿æ¥ï¼å¹¶ä¸å个åè¯å¿
é¡»ä¸ºåæ°ã**
æ£ä¾ï¼`org.apache.dubbo.common.threadlocal`
åä¾ï¼~~`org.apache_dubbo.Common.threadLocals`~~
**5ãæ½è±¡ç±»å½åä½¿ç¨ Abstract å¼å¤´**ã
```java
//为è¿ç¨ä¼ è¾é¨åæ½è±¡åºæ¥çä¸ä¸ªæ½è±¡ç±»ï¼åºå¤ï¼Dubboæºç ï¼
public abstract class AbstractClient extends AbstractEndpoint implements Client {
}
```
**6ãå¼å¸¸ç±»å½åä½¿ç¨ Exception ç»å°¾ã**
```java
//èªå®ä¹ç NoSuchMethodExceptionï¼åºå¤ï¼Dubboæºç ï¼
public class NoSuchMethodException extends RuntimeException {
private static final long serialVersionUID = -2725364246023268766L;
public NoSuchMethodException() {
super();
}
public NoSuchMethodException(String msg) {
super(msg);
}
}
```
**7ãæµè¯ç±»å½å以å®è¦æµè¯çç±»çåç§°å¼å§ï¼ä»¥ Test ç»å°¾ã**
```java
//为 AnnotationUtils ç±»åçæµè¯ç±»ï¼åºå¤ï¼Dubboæºç ï¼
public class AnnotationUtilsTest {
......
}
```
POJO ç±»ä¸å¸å°ç±»åçåéï¼é½ä¸è¦å is åç¼ï¼å¦åé¨åæ¡æ¶è§£æä¼å¼èµ·åºååé误ã
å¦ææ¨¡åãæ¥å£ãç±»ãæ¹æ³ä½¿ç¨äºè®¾è®¡æ¨¡å¼ï¼å¨å½åæ¶éä½ç°åºå
·ä½æ¨¡å¼ã
### å½åæè¯»æ§è§è
**1ã为äºè½è®©å½åæ´å ææåæè¯»ï¼å°½éä¸è¦ç¼©å/ç®ååè¯ï¼é¤éè¿äºåè¯å·²ç»è¢«å
¬è®¤å¯ä»¥è¢«è¿æ ·ç¼©å/ç®åãæ¯å¦ `CustomThreadFactory` ä¸å¯ä»¥è¢«åæ ~~`CustomTF` ã**
**2ãå½åä¸å彿°ä¸æ ·è¦å°½é追æ±çï¼å¯è¯»æ§å¼ºçååä¼å
äºç®ççååï¼è½ç¶å¯è¯»æ§å¼ºçåå伿¯è¾é¿ä¸ç¹ã** è¿ä¸ªå¯¹åºæä»¬ä¸é¢è¯´ç第 1 ç¹ã
**3ãé¿å
æ æä¹çå½åï¼ä½ èµ·çæ¯ä¸ä¸ªååé½è¦è½è¡¨æææã**
æ£ä¾ï¼`UserService userService;` `int userCount`;
åä¾: ~~`UserService service`~~ ~~`int count`~~
**4ãé¿å
å½åè¿é¿ï¼50 个å符以å
æå¥½ï¼ï¼è¿é¿çå½åé¾ä»¥é
读并ä¸ä¸éã**
**5ãä¸è¦ä½¿ç¨æ¼é³ï¼æ´ä¸è¦ä½¿ç¨ä¸æã** ä¸è¿å alibabaãwuhanãtaobao è¿ç§å½é
éç¨åè¯å¯ä»¥å½åè±ææ¥çå¾
ã
æ£ä¾ï¼discount
åä¾ï¼~~dazhe~~
## Codelf:åéå½åç¥å¨?
è¿æ¯ä¸ä¸ªç±å½äººå¼åçç½ç«ï¼ç½ä¸æå¾å¤äººç§°å
¶ä¸ºåéå½åç¥å¨ï¼ æå¨å®é
使ç¨äºå 天ä¹åæè§æ²¡é£ä¹å¥½ç¨ãå°ä¼ä¼´ä»¬å¯ä»¥èªè¡ä½éªä¸ä¸ï¼ç¶ååç»åºèªå·±ç夿ã
Codelf æä¾äºå¨çº¿ç½ç«çæ¬ï¼ç½åï¼[https://unbug.github.io/codelf/](https://unbug.github.io/codelf/)ï¼å
·ä½ä½¿ç¨æ
åµå¦ä¸ï¼
æéæ©äº Java ç¼ç¨è¯è¨ï¼ç¶åæç´¢äºâåºååâè¿ä¸ªå
³é®è¯ï¼ç¶åå®å°±è¿åäºå¾å¤å
³äºåºååçå½åã

å¹¶ä¸ï¼Codelf è¿æä¾äº VS code æä»¶ï¼çè¿ä¸ªè¯ä»·ï¼çæ¥å¤§å®¶è¿æ¯å¾åæ¬¢è¿æ¬¾å½åå·¥å
·çã

## ç¸å
³é
读æ¨è
1. ãé¿éå·´å·´ Java å¼åæåã
2. ãClean Codeã
3. Google Java ä»£ç æåï¼