1. 清晰的命名
● 原則:代碼應(yīng)該易于閱讀和理解;例如:變量、函數(shù)和類的名稱應(yīng)能清楚表達(dá)其意圖;
● 示例:
int numberOfStudents = 30;
public double calculateAreaOfCircle(double radius) {
return Math.PI * radius * radius;
}
2. 使用注釋
● 原則:在復(fù)雜或重要的代碼段添加注釋,幫助他人理解;
● 示例:
public static double calculateAverage(List<Double> numbers) {
if (numbers == null || numbers.isEmpty()) {
return 0;
}
double sum = 0.0;
int count = 0;
for (Double num : numbers) {
if (num != null) {
sum += num;
count++;
}
}
if (count == 0) {
return 0;
}
double average = sum / count;
return average;
}
3. 一致的編碼風(fēng)格
● 原則:遵循團(tuán)隊(duì)的編碼標(biāo)準(zhǔn),保持代碼風(fēng)格一致;
● 示例:使用統(tǒng)一的縮進(jìn)和大括號(hào)位置。例如 IDEA 等 IDE 中配置統(tǒng)一的 CodeStyle:Alibaba-CodeStyle 、Google-CodeStyle 等;
4. 代碼模塊化
● 原則:將功能分解成小模塊,增加重用性;
● 示例:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
5. 避免重復(fù)代碼
● 原則:遵循DRY原則(Don’t Repeat Yourself);
● 示例:
public class Calculator {
public void addAndPrint(int a, int b) {
int result = a + b;
System.out.println("Result: " + result);
}
public void addAndPrintAnother(int x, int y) {
int result = x + y;
System.out.println("Result: " + result);
}
}
public class Calculator {
public void addAndPrint(int a, int b) {
printResult(add(a, b));
}
public int add(int a, int b) {
return a + b;
}
private void printResult(int result) {
System.out.println("Result: " + result);
}
}
6. 依賴接口而不是具體的實(shí)現(xiàn)
● 原則:依賴接口而不是具體的實(shí)現(xiàn),增強(qiáng)靈活性;
● 示例:
public interface Shape {
double area();
}
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
public class Square implements Shape {
private double sideLength;
public Square(double sideLength) {
this.sideLength = sideLength;
}
@Override
public double area() {
return sideLength * sideLength;
}
}
void printf(Shape shape);
7. 避免魔法數(shù)字
● 原則:使用常量代替魔法數(shù)字;
● 示例:
final double FIXED_RATE = 3
double area = FIXED_NO * radius
8. 簡(jiǎn)化條件語(yǔ)句
● 原則:避免復(fù)雜的條件邏輯。用快速 return 來(lái)減少 if 嵌套層次;
● 示例:
public void checkUser(User user) {
if (user != null) {
if (user.getAge() > 18) {
if (user.isActive()) {
System.out.println("Access granted");
} else {
System.out.println("User is not active");
}
} else {
System.out.println("User is underage");
}
} else {
System.out.println("User is null");
}
}
public void checkUser(User user) {
if (user == null) {
System.out.println("User is null");
return;
}
if (user.getAge() <= 18) {
System.out.println("User is underage");
return;
}
if (!user.isActive()) {
System.out.println("User is not active");
return;
}
System.out.println("Access granted");
}
9. 異常處理
● 原則:通過(guò)適當(dāng)?shù)漠惓L幚硖岣叱绦虻慕研裕?/p>
● 示例:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
log.error("非法參數(shù),不能被零除");
}
try (Entry entry = SphU.entry("resourceName")) {
} catch (BlockException ex) {
}
10. 標(biāo)準(zhǔn)化錯(cuò)誤日志處理
● 原則:統(tǒng)一錯(cuò)誤處理的方式和日志記錄。方便日志采集和告警配置;
● 示例:
public void logError(String message) {
log.error("ERROR|Trace:{0}|Msg:{1} " Context.getTrace(), message);
}
11. 方法參數(shù)不宜過(guò)長(zhǎng)
● 原則:方法參數(shù)應(yīng)盡量少,避免混亂,超過(guò)3個(gè)推薦封裝成模型;
● 示例:
void createUser(String name,int age,String email);
public class UserService {
public void createUser(User user) {
}
}
class User {
private String name;
private int age;
private String email;
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
}
12. 使用現(xiàn)有工具類來(lái)簡(jiǎn)化操作
● 原則:優(yōu)先使用現(xiàn)有工具類 如apache.commons
來(lái)簡(jiǎn)化操作
● 示例:
StringUtils.isNotEmpty("");
CollectionUtils.isNotEmpty()
13. 盡量使用不變的變量
● 原則:使用final
關(guān)鍵字聲明不可變的變量,提高代碼的可靠性;
● 示例:
final int MAX_VALUE = 100;
ImmutableList.of();
14. 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)
● 原則:先寫(xiě)測(cè)試,再寫(xiě)代碼,確保代碼的可測(cè)試性;
● 示例:
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3));
}
15. 避免過(guò)度優(yōu)化
● 原則:優(yōu)先考慮代碼的可讀性,優(yōu)化通常是在識(shí)別出性能問(wèn)題后進(jìn)行的;
16. 使用版本控制
● 原則:使用版本控制工具(git)管理代碼變化;
17. 重視系分文檔
● 原則:
○ 開(kāi)發(fā)前,考慮清楚為什么要做這個(gè)需求。從背景及現(xiàn)狀分析->為什么要做(why)->要做什么(what)->如何去做(how) 體系化思考;
○ 再?gòu)臉I(yè)務(wù)用例分析->系統(tǒng)依賴分析->領(lǐng)域模型分析->架構(gòu)設(shè)計(jì)分析->時(shí)序圖分析等落地最終的系分;
18. 重視代碼評(píng)審
● 原則:定期進(jìn)行代碼評(píng)審,提高代碼質(zhì)量,提高團(tuán)隊(duì)研發(fā)意識(shí);
19. 重視每一次交付
● 原則:
○ 事前鎖定資源,上下游達(dá)成一致,明確里程碑計(jì)劃;
○ 事中按需推進(jìn),每周項(xiàng)目進(jìn)度同步,及時(shí)通曬風(fēng)險(xiǎn);
○ 事后組織復(fù)盤(pán)以及關(guān)注業(yè)務(wù)數(shù)據(jù)(關(guān)注價(jià)值)
20.重視交付質(zhì)量
● 原則:新功能需多考慮灰度驗(yàn)證
○ 后端服務(wù):可按分組進(jìn)行灰度驗(yàn)證(gray 分組->default 分組)
○ 客戶端:小范圍升級(jí)驗(yàn)證無(wú)問(wèn)題后,逐步放量升級(jí);
該文章在 2024/11/14 9:53:24 編輯過(guò)