9.Coding convention
9.1. Mục tiêu chương
Chương này quy định chuẩn coding nhằm:
-
Đảm bảo code thống nhất giữa các module và các đơn vị phát triển
-
Giúp code dễ đọc, dễ hiểu và dễ bảo trì
-
Giảm lỗi phát sinh do cách đặt tên hoặc coding không đồng nhất
-
Tăng hiệu quả review và kiểm soát chất lượng code
9.2. Khái niệm / phạm vi áp dụng
Quy định này áp dụng cho:
-
Toàn bộ source code của hệ thống
-
Core Team và Partner Team
-
Tất cả các module trong modules/**
-
Các thành phần trong common/** và config/** do Core Team quản lý
9.3. Quy định chính
9.3.1. Quy tắc đặt tên
Các thành phần phải đặt tên theo quy ước thống nhất:
|
Thành phần |
Quy tắc đặt tên |
Ví dụ |
|
Controller |
<Name>Controller |
UserController |
|
Service |
<Name>Service |
UserService |
|
Repository |
<Name>Repository |
UserRepository |
|
Entity |
<Name>Entity |
UserEntity |
|
DTO Request |
<Name>CreateRequest, <Name>UpdateRequest |
UserCreateRequest |
|
DTO Response |
<Name>Response |
UserResponse |
9.3.2. Quy tắc chung
Áp dụng cho toàn bộ code Java:
-
Dùng camelCase cho:
-
Biến
-
Method
-
Dùng PascalCase cho:
-
Class
-
Interface
-
Enum
Ví dụ:
private String fullName; // đúng
private String FullName; // sai
public class UserService { } // đúng
public class userService { } // sai
Quy định về logging
Không được dùng:
System.out.println("Error");
Phải dùng logging chuẩn:
private static final Logger log = LoggerFactory.getLogger(UserService.class);
log.info("User created");
log.error("Create user failed", ex);
9.3.3. Validation
Tất cả dữ liệu đầu vào phải được validate bằng annotation.
Các annotation chuẩn:
-
@NotNull
-
@NotBlank
-
@Size
Ví dụ:
public class UserCreateRequest {
@NotBlank
@Size(max = 100)
private String username;
@NotBlank
private String password;
}
9.4. Cách thực hiện / quy trình
Quy trình tạo DTO đúng chuẩn
Bước 1: Tạo class DTO theo quy tắc đặt tên
Ví dụ:
UserCreateRequest
UserUpdateRequest
UserResponse
Bước 2: Thêm validation annotation
Bước 3: Dùng DTO trong controller
@PostMapping
public ApiResponse<UserResponse> create(
@Valid @RequestBody UserCreateRequest request) {
return ApiResponse.ok(userService.create(request));
}
Quy trình logging chuẩn
Bước 1: Khai báo logger trong class
private static final Logger log =
LoggerFactory.getLogger(UserService.class);
Bước 2: Dùng logger thay cho System.out.println
9.5. Ví dụ minh họa
Trường hợp sai
public class usercontroller {
public void CreateUser() {
System.out.println("Create user");
}
}
Sai vì:
-
Tên class không đúng chuẩn
-
Tên method không camelCase
-
Dùng System.out.println
Trường hợp đúng
public class UserController {
private static final Logger log =
LoggerFactory.getLogger(UserController.class);
public void createUser() {
log.info("Create user");
}
}
Ví dụ DTO sai
public class userDTO {
public String name;
}
Sai vì:
-
Tên class không chuẩn
-
Không có validation
-
Field public
Ví dụ DTO đúng
public class UserCreateRequest {
@NotBlank
@Size(max = 255)
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
9.6. Checklist áp dụng
Trước khi commit hoặc tạo PR:
-
Tên class đúng chuẩn:
-
Controller → *Controller
-
Service → *Service
-
Repository → *Repository
-
Entity → *Entity
-
Biến và method dùng camelCase
-
Class dùng PascalCase
-
Không dùng System.out.println
-
Dùng logging chuẩn slf4j
-
DTO có validation annotation
Không có field public trong DTO